我试图在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;
//
// }
}
答案 0 :(得分:5)
您正在再次打印elements
列表,将其更改为nt
设置。
// Output shall not contain duplicates
for (Element elem: nt){
System.out.print(":"+elem.val);
}