java:TreeSet命令

使用此代码,我得到此输出:

TreeSet t=new TreeSet(); t.add("test 15"); t.add("dfd 2"); t.add("ersfd 20"); t.add("asdt 10"); Iterator it=t.iterator(); while(it.hasNext()){ System.out.println(it.next); } 

我明白了:

  asdt 10 dfd 2 ersfd 20 test 15 

如何根据数字,使用TreeSet获得此类订单?

  dfd 2 asdt 10 test 15 ersfd 20 

TreeSet实现按您插入的字符串值的字典顺序排序。 如果要按整数值排序,则需要按照其他建议进行排序并创建新对象并覆盖compareTo方法,或使用自己的比较器。

 Set set = new TreeSet(new Comparator() { public boolean equals(Object obj) { // implement } public int compareTo(String one, String other) { // implement } }); 

要么

 public class MyClass implements Comparable { private String key; private int value; public int compareTo(MyClass other) { // implement } public boolean equals(MyClass other) { // implement } // snip ... } Set set = new TreeSet(); 

您可以使用其中一个TreeSet构造函数: http : //docs.oracle.com/javase/7/docs/api/java/util/TreeSet.html#TreeSet%28java.util.Comparator%29

这允许您指定自己的比较器,允许您根据需要组织Set中的条目。

实现一个Comparator ,它从String中提取数字,然后按数字排序,只有当两个数字相等时才回退到String比较。

使用接收自定义Comparator的TreeSet构造函数,并实现以不同方式对字符串进行排序的Comparator。

这是一个例子(未经测试,在使用前检查代码):

 TreeSet t = new TreeSet(new Comparator() { public int compare(String s1, String s2) { int spaceIndex1 = s1.indexOf(' '); int spaceIndex2 = s2.indexOf(' '); return Integer.parseInt(s1.substring(spaceIndex1 + 1)).compareTo(Integer.parseInt(s2.spaceIndex2 + 1)); } }); 

尝试这个:

 TreeSet set = new TreeSet(new Comparator(){ public int compare(String o1, String o2){ String n1 = o1.split(" ")[1]; String n2 = o2.split(" ")[1]; return Integer.parse(n2) - Integer.parse(n1); } public boolean equals(String o1, String o2){ return compare(o1,o2)==0; } }); 
 class Book implements Comparable { String name; int id; public Book(String name,int id) { this.name = name; this.id = id; } public int compareTo(Book b) { if(id>b.id){ return 1; }else if(id set=new TreeSet(); //Creating Books Book b1=new Book("test", 15); Book b2=new Book("dfd", 2); Book b3=new Book("ersfd", 20); Book b4=new Book("asdt", 10); //Adding Books to TreeSet set.add(b1); set.add(b2); set.add(b3); set.add(b4); //Traversing TreeSet for(Book b:set){ System.out.println(b.name+" "+b.id); } } }