Java 树集合和哈希集合中的addAll是如何工作的?
当我在树集上添加数据时,我几乎丢失了所有数据。似乎我只有我的第一个元素 我读这个问题是为了代码优化,我试着做类似的事情。但我并没有真正成功 输入:Java 树集合和哈希集合中的addAll是如何工作的?,java,hashset,treeset,Java,Hashset,Treeset,当我在树集上添加数据时,我几乎丢失了所有数据。似乎我只有我的第一个元素 我读这个问题是为了代码优化,我试着做类似的事情。但我并没有真正成功 输入: int iValue = 0; HashSet<TagResult> results = new HashSet<TagResult>(); for(Document doc : docs) { NodeList nList = doc.getElementsByTagName("TEXT")
int iValue = 0;
HashSet<TagResult> results = new HashSet<TagResult>();
for(Document doc : docs) {
NodeList nList = doc.getElementsByTagName("TEXT");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node nNode = nList.item(temp);
if (nNode.getNodeType() == Node.ELEMENT_NODE) {
Element eElement = (Element) nNode;
iValue = searchWords.searchOnTag(eElement, szSearch);
if(iValue > 0) {
results.add(new TagResult(eElement, iValue));
}
}
}
}
System.out.println("Set :\n-------------------------");
for(TagResult result : results) {
System.out.println(getTagValue("Tag",result.getElement()));
}
Set<TagResult> sortedResult = new TreeSet<TagResult>(new Comparator<TagResult>() {
public int compare(TagResult e1, TagResult e2) {
return e2.getValue() - e1.getValue();
}
});
sortedResult.addAll(results);
System.out.println("Sorted Result :\n-------------------------");
for(TagResult result : sortedResult) {
System.out.println(getTagValue("Tag",result.getElement()));
}
排序结果:
TXT_KEY_RELIGION_POSITIF_MEDIAN_05
我不明白我为什么会有这个问题。我可以想象
e2.getValue() - e1.getValue();
对于集合中所有被视为相等的项,返回0。尝试打印标签的tag.getValue()
,以检查是否正确
摘录自(我的):
请注意,如果要正确实现set接口,set维护的顺序(无论是否提供显式比较器)必须与equals一致。(请参见Comparable或Comparator以获得与equals一致的精确定义。)这是因为Set接口是根据equals操作定义的,但是树集实例使用其compareTo(或compare)方法执行所有元素比较,因此此方法认为相等的两个元素是,从集合的角度来看,等于。即使集合的顺序与equals不一致,集合的行为也是定义良好的;它只是没有遵守Set接口的总合同
e2.getValue() - e1.getValue();