【发布时间】:2017-12-14 22:52:03
【问题描述】:
我有一个 A 类列表
public class A {
String port;
String ip;
String name;
Obeject ...others;
}
在这个列表中,我想找到共享相同 ip 和端口的重复元素。
重写 equals() 来比较 ip 和 port 并使用 hashSet 可能是解决这个问题的一种方法。但我认为 equals() 不应该被覆盖,因为这个类中还有其他字段,它可能会混淆逻辑。
使用 TreeSet 并实现 Comparator 是另一种方式。但是 ip 和端口很难比较哪个更大,因为我们有 ipv6、ipv4、ip 范围、端口范围等。在 compare() 中,如果只在 ip 和端口相等时返回 0,如果它们不相等则返回 1 将导致逻辑错误。因为TreeSet是通过红黑树实现的。
一个名为 AHelper 的子类可以使用重写 equals()。但我认为这很愚蠢。
还有其他方法可以解决这个问题吗? ~~~非常感谢。
【问题讨论】:
-
选项 2 在我看来不错,据我所知,无法避免比较 IP 和端口。
-
覆盖
equals来简单地比较两个属性不是一个好的选择——我会从一个实用方法开始,它接受A的实例并比较它们的属性并返回true或@ 987654325@。我什至会考虑制作一个Equatable接口,它可以在比较两个对象时为您提供更大的灵活性,因此您可以轻松更改进行比较的方式
标签: java duplicates set treeset