執行比較我有這樣的和平代碼:元素後取出在TreeSet中
final SortedSet<NisType> lAllNNisType = new TreeSet<NisType>(new NisTypeComparator());
lAllNisType.addAll(pAllNisType); // where pAllNisType is of type ArrayList<NisType>
這就是我比較類:
private class NisTypeComparator implements Comparator<NisType> {
@Override
public int compare(NisType pNisType, NisType pNisType2) {
if (pNisType.getPrio()>pNisType2.getPrio())
return 1;
else if (pNisType.getPrio()<pNisType2.getPrio())
return -1;
else
return 0;
}
}
我的ArrayList pAllNisType
充滿了6個不同的對象(基於平等和hashCode方法)。 後然而這一行被執行:
lAllNisType.addAll(pAllNisType);
lAllNisType
只包含5個對象。 有一個比較返回0.並且由於這一個對象已從lAllNisType
中刪除。
我不知道這裏發生了什麼。 對象不同。如果我做這樣的事情:
final Set<NisType> lAllNisType = new HashSet<NisType>(pAllNisType);
lAllNisType
有6個元素。
感謝您的幫助
斯特凡
然後你的'比較器'比較不同於'equals'和'hashCode'。當然是 – 2014-10-20 15:18:51
。爲什麼這很重要? – 2014-10-20 15:20:22
這就解釋了爲什麼你在'TreeSet'中有5個元素,而在'HashSet'中有6個元素。 – 2014-10-20 15:20:56