web-dev-qa-db-ja.com

java:TreeSetの順序

このコードを使用すると、次の出力が得られます。

 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 
8
Enzo

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

TreeSetコンストラクタの1つを使用できます: http://docs.Oracle.com/javase/7/docs/api/Java/util/TreeSet.html#TreeSet%28Java.util。コンパレータ%29

これにより、セット内のエントリを好きなように整理できる独自のコンパレータを指定できます。

Comparatorから数値を抽出してから最初に数値でソートするStringを実装し、両方の数値が等しい場合にのみString比較にフォールバックします。

2
Tim B

カスタム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));
    }
});
1
ethanfar

これを試して:

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;
   }
});
0
Peter Rader
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. これは、配列内で2番目に大きい要素を見つけることに関連するプログラムです。ソートの目的でツリーセットを使用しました。ツリーセットを使用すると、繰り返されるすべての要素を削除できます。

  2. Setメソッドを使用して要素を並べ替えた後。配列またはリストの最後の要素を見つけることができる関数set.last()があります。

  3. 配列内で2番目に大きい要素を与えるset.last()-1関数を適用しました。

0
Vivek