簡體   English   中英

java:樹集順序

[英]java: TreeSet order

使用此代碼,我得到以下輸出:

 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 

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

您可以使用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<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));
    }
});

使用 lambda

Set<String> set = new TreeSet<String>(
                (o1, o2) -> String.format("%3s", o1.substring( o1.indexOf(" ") + 1)).replace(" ","0")
                .compareTo( String.format("%3s", o2.substring( o2.indexOf(" ") + 1)).replace(" ","0")
                                     ));
set.add("test 15");
set.add("dfd 2");
set.add("ersfd 20");
set.add("asdt 10");
set.stream().forEach(s -> System.out.println(s));

結果:

dfd 2
asdt 10
test 15
ersfd 20

但我強烈建議在其他關鍵結構中分離重要值(在本例中為整數)。 以便於操作。

嘗試這個:

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;
   }
});
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);  
       }  
   }  
}  
import java.util.ArrayList;
import java.util.*;
import java.util.Arrays;
class SecondHighest {
    public static void main(String[] args) {
        int i;
        int a[]={2,3,4,5,7,6,9,9,9,8,8,7};
        int total=a.length;

        Arrays.sort(a);

        TreeSet<Integer> set=new TreeSet<Integer>();
        for(i=0;i<total;i++)
        {
            set.add(a[i]);
        }
        System.out.println(set.last()-1);

        Iterator<Integer> itr=set.iterator();
        while(itr.hasNext())
        {
            System.out.println(itr.next());
        }
    }

}
  1. 這是一個與查找數組中第二大元素相關的程序。 我使用 Tree-set 進行排序。 使用樹集,我們可以刪除所有重復的元素。

  2. 使用 set 方法對元素進行排序后。有一個函數 set.last() ,您可以通過它找到數組或列表的最后一個元素。

  3. 我應用了 set.last()-1 函數,它為我提供了數組中的第二大元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM