java:TreeSet命令

问题描述 投票:7回答:5

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

 TreeSet<String> t=new TreeSet<String>();
  t.add("test 15");
  t.add("dfd 2");
  t.add("ersfd 20");
  t.add("asdt 10");


 Iterator<String> 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 
java treeset
5个回答
10
投票

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

Set<String> set = new TreeSet<String>(new Comparator<String>() {

    public int compare(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<MyClass> set = new TreeSet<MyClass>();

2
投票

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

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

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


1
投票

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

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

TreeSet<String> t = new TreeSet<String>(new Comparator<String>() {
    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));
    }
});

0
投票

试试这个:

TreeSet set = new TreeSet(new Comparator<String>(){
   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;
   }
});

-1
投票
class Book implements Comparable<Book> {    
   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<b.id){  
           return -1;  
       }else{  
          return 0;  
       }  
   }  
}

public class TreeSet2 {  
   public static void main(String[] args) {  
       Set<Book> set=new TreeSet<Book>();  

       //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);  
       }  
   }  
}  
© www.soinside.com 2019 - 2024. All rights reserved.