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();