0 java collections hashset treeset
我在这里尝试了一点。但是我不明白为什么 TreeSet 可以在这里过滤掉重复的条目,而 HashSet 不能。
public class DataClass implements Comparable<DataClass> {
private final String data;
public DataClass(String data) {
this.data = data;
}
@Override
public boolean equals(Object other) {
if (other == null || other.getClass() != this.getClass()) return false;
DataClass dc = (DataClass) other;
return this.data.length() == dc.data.length();
}
@Override
public int compareTo(DataClass dc) {
return Integer.compare(this.data.length(), dc.data.length());
}
@Override
public String toString() {
return data;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的主要方法:
DataClass[] data = new DataClass[4];
data[0] = new DataClass("Hans");
data[1] = new DataClass("Tom");
data[2] = new DataClass("Fred");
data[3] = new DataClass("Sia");
System.out.println();
TreeSet<DataClass> treeSet = new TreeSet<>();
for (DataClass dc : data) treeSet.add(dc);
for (DataClass dc : treeSet)
System.out.print(dc+" ");
System.out.println();
HashSet<DataClass> hashSet = new HashSet<>();
for (DataClass dc : data)
hashSet.add(dc);
for (DataClass dc : hashSet)
System.out.print(dc+" ");
Run Code Online (Sandbox Code Playgroud)
输出是:
Tom Hans
Hans Tom Fred Sia
Run Code Online (Sandbox Code Playgroud)
HashSet 不关注 equals() 方法吗?我现在也没有在文档中找到任何内容。我错过了什么?
您需要覆盖该hashCode()方法以HashSet使 不包含重复项,因为HashSet只有在发生冲突时才会检查相等性。但是,TreeSet不需要hashCode()被覆盖。请参阅:HashSet 包含重复条目
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |