java TreeSet与自定义比较器无法正常工作

时间:2013-12-07 23:53:25

标签: java comparator treeset

我试图在TreeSet中使用自定义比较器。但是,似乎有些不对劲。无论我是使用自定义等于还是来自比较器的比较,我都会看到重复。任何想法错在哪里? 以下是代码:(请查看以下评论​​)

import java.util.ArrayList;
import java.util.Comparator;
import java.util.TreeSet;

public class TreemapTest {

    public static void main(String[] args) {

        //Take an array of integers
        int list[] = { 1,2,3,4,2,4,2,5 };

        //Create a list of custom objects
        ArrayList<Element> elements = new ArrayList<Element>();

        //Populate the list with values from int array
        for (int v : list){
            elements.add(new Element(v));
        }

        /** Attempt to create a treeset from the arraylist */
        // Create the Treeset with custom comparator
        TreeSet<Element> nt = new TreeSet<Element>(new Comparator<Element>(){
            public int compare(Element a, Element b){
                System.out.println("Comparing "+ a.val + " and "+ b.val);
                if ( a.val == b.val ) 
                    return 0;
                if ( (a.val - b.val) > 0 )
                    return 1;
                return -1;
            }
        });

        // Add the elements into the treeset
        for (Element elem: elements ){
            nt.add(elem);
        }
        // Output shall not contain duplicates
        for (Element elem: elements ){
            System.out.print(":"+elem.val);
        }
    }
}

class Element {
    public int val;
    Element(int v){
        val = v;
    }
//  boolean equals(Element e){
//      return this.val == e.val;
//      
//  }
}

1 个答案:

答案 0 :(得分:5)

您正在再次打印elements列表,将其更改为nt设置。

// Output shall not contain duplicates
for (Element elem: nt){
    System.out.print(":"+elem.val);
}