- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
基本上,我要做的是为每个 Person 对象存储多个地址。我决定通过将 Address 对象存储在 Person 类的 TreeSet 中来实现这一点。本质上,我想将我创建的每个地址对象的 toString() 存储到我的 TreeSet 中。我通过 Person 类的 addAddress() 方法传递 Address 对象的属性,该方法将属性传递给 Address 类的构造函数。
我在指定行收到一个错误...
public class Person {
private TreeSet<Address> addresses = new TreeSet<Address>();
public void addAddress(String type, String street, String city, String state, String zip) {
//ERROR ON THIS LINE BELOW
Address addressObj = new Address(type, street, city, state, zip);
addresses.add(addressObj);
}
}
public class Address {
private String type;
private String street;
private String city;
private String state;
private String zip;
@Override
public String toString() {
return street + " " + city + " " + ", " + state + " " + zip + ": " + type;
}
public Address(String type, String street, String city, String state, String zip) {
super();
this.type = type;
this.street = street;
this.city = city;
this.state = state;
this.zip = zip;
}
}
public class MainDriver {
public static void main(String[] args) {
Person p1 = new Person();
p1.addAddress("Home", "321 Den Ave", "Orlando", "FL", "32792");
p1.addAddress("Work", "4411 Alligator Court", "Orlando", "FL", "32792");
}
}
这是错误信息:
Exception in thread "main" java.lang.ClassCastException: Address cannot be cast to java.lang.Comparable
at java.util.TreeMap.compare(TreeMap.java:1294)
at java.util.TreeMap.put(TreeMap.java:538)
at java.util.TreeSet.add(TreeSet.java:255)
at Person.addAddress(Person.java:64)
at MainDriver.main(MainDriver.java:9)
明确一点:我不想将地址存储在一个字符串中,因为我希望以后能够单独操作每个属性。我也不希望 Address 类属性存储在 Person 类中,因为我需要 Address 类的多次迭代才能为每个 Person 对象存储多个地址。
最佳答案
问题是,要将某些东西放入 TreeSet,它们必须具有可比性。这是因为树集会尝试以树结构排列您的项目。如果不能,则会抛出异常,因此您放入树集中的所有内容都必须实现 Comparable
。
但是,地址不能进行逻辑比较,不是吗?为地址编写一个 compareTo
方法真的很难。您如何确定一个地址是否比另一个地址“更大”?
因此,我认为TreeSet
不是适合此目的的数据结构。我建议您改用 HashSet
。哈希集要求您的项目实现hashCode
,这是一种返回该对象唯一的数字的方法,并且等于
。如果对象的哈希码相等,则这两个对象在逻辑上也相等。
您可以使用 Objects.hash
来帮助您实现这一点:
@Override
public int hashCode() {
return Objects,hash(type, street, city, state, zip);
}
或者,使用您的 IDE 生成的实现之一。这是我的 IntelliJ IDEA 得到的结果:
@Override
public int hashCode() {
int result = type.hashCode();
result = 31 * result + street.hashCode();
result = 31 * result + city.hashCode();
result = 31 * result + state.hashCode();
result = 31 * result + zip.hashCode();
return result;
}
equals
方法也应该被实现。你可以这样做:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Address address = (Address) o;
if (!type.equals(address.type)) return false;
if (!street.equals(address.street)) return false;
if (!city.equals(address.city)) return false;
if (!state.equals(address.state)) return false;
return zip.equals(address.zip);
}
关于java - 将多个 Address 对象从 Person 类存储到 TreeSet 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46701958/
很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清这个问题以便重新打开它,visit the help center .
有谁知道区别吗? 最佳答案 如果您想玩可移植的可执行文件,就没有办法绕过 the specs 的副本。 . 已经有一段时间了,但如果内存正确地为我服务:IT 和 IAT 是相同的,除了 IAT 在解析
我正在尝试在 ec2-instance 上安装 Hadoop-2.6.0。 我下载并安装了 Hadoop。我还设置了环境变量。尝试启动 hdfs 服务时出现以下错误。 [ec2-user@ip-10-
我写了一个示例程序。如果我打印 pa 和 pb 的地址都是不同的。你能告诉我为什么会这样吗? #include using namespace std; class A { int x; }; cla
*&x 是否总是等于 x?如果不是,什么时候不是? &*x 是否总是等于 x?如果不是,什么时候不是? 我的猜测是 (1) 总是正确的,但 (2) 并不总是正确的,因为 x 可能并不总是一个指针,所以
我有一个 Address 类,它是一个非常简单的元数据容器。 (在底部。) 我有一个 Address 对象数组,它不是可选的 - 它肯定存在。我还有一个类维护这些引用的可选列表,如下所示: publi
我在理解 wsdl 中 soap:address 和 http:address 标签之间的区别时遇到了一些问题。它可以互换吗?我可以使用 soap:address 代替 http:address 吗?
关于AT (...) ld 的指令, this source状态: AT ( ldadr ) The expression ldadr that follows the AT keyword spec
我正在使用 Tensorflow 的 C API 在并行模拟中进行推理。因为我想要 AVX 支持,所以我从源代码编译了 Tensorflow。我链接它并使用 wmake 编译所有内容。 现在,如果我开
就像标题一样,我是cxf的新手。只是想知道 soap:address 和发布时在应用程序上下文中的 jaxws:endpoint 中指定的地址有什么区别? 此外,在jaxws:endpoint中,地址
#include #include using namespace std; class myexception: public exception { virtual const char*
C/C++ 应用程序抛出该错误,如何开始调试(比添加打印语句更好的主意)? 最佳答案 第二个地址是不是一个非常小的数字,比如 0x00000001 或 0x00000000?如果是这样,您可能只是忘记
如果我没记错的话,几天前它曾经显示“localhost”。我不确定是什么改变了 server.address().address 返回双冒号 (::) 。我在这里读到,如果它可用,它会返回一个 IPv
我现在正在使用 MPI 练习简单的并行编程。该代码旨在通过随机生成 N*N 矩阵并使用简单的邻域加权平均滤波器来模拟图像处理,而不处理第一行和最后一行和列。我在编译时没有出错,但在运行时出现了一些我无
这个问题在这里已经有了答案: How to retrieve range.address which is longer than 255 character? (2 个回答) 5年前关闭。 觉得很奇
当我尝试启动 Apache2 时收到以下消息: * Restarting web server apache2
我正在阅读一些有关指针和结构的内容,但我就是不明白:微 Controller 的头文件中有这样的内容: #define NVIC_BASE (SCS_BASE + 0x0100) /*ICER[0]
我有 alertmanager 作为 docker 容器在两台不同的主机上运行,并且两者都应该作为集群运行。两台机器都在同一个 vpc 内,并与私有(private) IP 地址通信。 我需要知道
在 Organization schema两者都有属性 address和 location . 什么时候应该使用每一个的真实世界例子? 地点 事件、组织或行动的地点。 地址 项目的物理地址。 最佳答案
我想要具有 FIFO 的服务器-客户端模型和客户端获取目录路径,但我收到错误“读:错误地址”和“写:错误地址”。 客户端 服务器错误:“读取:地址错误” 客户端错误:“写入:地址错误” 最佳答案 您可
我是一名优秀的程序员,十分优秀!