I have tried a little bit here. But I don't understand why TreeSet can filter out the duplicate entries here, but HashSet can't.
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;
}
}
Here is my main Method:
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+" ");
The ouput is:
Tom Hans
Hans Tom Fred Sia
Doesn't HashSet pay attention to equals() method? I haven't found anything in the documentation now either. Did I miss something?