我有兩套我的代碼,並在他們我添加相同的元素集合。問題是,TreeSet不會添加所有元素。我感到有點困惑。TreeSet不添加所有元素和HashSet
我現在有一個問題,我正在努力找出爲什麼我的TreeSet不會添加我傳遞給addAll的Collection中的所有元素。
這是一個TreeSet建立了比較,對於有項目的equals方法,如:
public final boolean equals(Object o) {
return this==o;
}
@Override
public int hashCode() {
int hash = 3;
hash = 67 * hash + Objects.hashCode(this.grauDeAdaptacao);
hash = 67 * hash + Objects.hashCode(this.idade);
return hash;
}
只是爲了測試我做了以下內容:
HashSet<Item> test1 = new HashSet<>(items);
TreeSet<Item> test2 = new TreeSet<>(getComparator());
test2.addAll(items);
if (test1.size() < 50 || test2.size()<50) {
throw new IllegalStateException();
}
和比較器用途:
private int compare(S ser1, S ser2) {
return ser1.getGrau().compareTo(ser2.getGrau());
}
但有什麼尷尬的是,哈希接縫很好,而TreeSet沒有全部50元素。
我需要兩個相同的元素,就像它們在所有子類中是相同的實例一樣,這就是爲什麼我做了這樣的最終方法。
爲什麼比較器不使用其輸入?請顯示一個簡短但完整的*程序來證明問題? –
爲什麼你重寫'equals'但不改變行爲......而你*是*改變'hashCode()'的行爲?基本上它是完全不清楚你想要達到什麼...... –
它使用,很抱歉..只是一秒 – Victor