2016-03-20 8 views
0

私は以下のJavaコードを持っています。私はソートされた方法で(私はTreeMapを使用しているので)キーが印刷されるのを期待していますが、キーをソートしていません。私は何が欠けているのですか?TreeMap反復で私にソートされたキーが与えられない

CODE:

public class TreeMapTest { 
    static TreeMap<String,String> li=new TreeMap<String,String>(); 

    static void readAndPrint(){ 
     for (Map.Entry<String, String> entry:li.entrySet()){ 
      System.out.println(entry); 
     } 

    } 
    public static void main(String[] args) { 
     for (int i=0;i<10;i++){ 
      String key = String.valueOf(new Random().nextInt(100)); 
      String item = UUID.randomUUID().toString().substring(30); 
      li.put(key,item); 
      System.out.println(MessageFormat.format("inserting ({0},{1})",key,item)); 
     } 

     readAndPrint(); 
    } 
} 

出力例:

inserting (7,f4b66a) 
inserting (2,5f417d) 
inserting (51,90bb9f) 
inserting (99,4bfb73) 
inserting (41,a4e9d5) 
inserting (14,9286d6) 
inserting (44,ec4fbd) 
inserting (58,e7dd3a) 
inserting (69,c54e66) 
inserting (0,d1fbfe) 
0=d1fbfe 
14=9286d6 
2=5f417d 
41=a4e9d5 
44=ec4fbd 
51=90bb9f 
58=e7dd3a 
69=c54e66 
7=f4b66a 
99=4bfb73 

あなたは私が時々出力をソートしていると、いつかそれがソートされていない(ソートされた要素を取得していないです見ての通り上記のように!)。私が見逃していることや誤解していることは何ですか?

答えて

6

は、です。デフォルトのソート順の文字列でソートされています。文字列は辞書順に並べ替えられているため、"14""2"未満と見なされます。

数値のソート順が必要な場合は、文字列ではなく整数のキーを作成しておく必要があります。

1

マップは文字列(最初の文字は1 < 4、その他の文字はなど)であるため、キーを辞書順に並べ替えています。

最も簡単な方法は、Integer sとキーを持つことです。String.valueOfを使用して整数に変換するために、不必要な必要性を回避します

TreeMap<Integer,String> li=new TreeMap<>(); 

1

整数ベースの比較を行う場合は、マップに整数キーが必要です。 String sがTreemap(Comparator)コンストラクタを使用することであろうと、まだキーを維持しながら、それを行うの

Integer key = new Random().nextInt(100); 
String item = UUID.randomUUID().toString().substring(30); 
li.put(key,item); 
1

一つの方法:

static TreeMap<String,String> li=new TreeMap<String,String>(); 

static TreeMap<Integer,String> li=new TreeMap<Integer,String>(); 

へと、変更置く方法への変更:

static TreeMap<String, String> li = new TreeMap<>(Comparator.comparing(Integer::valueOf)); 

もちろん、鍵を作ることはIntegerでも可能です。

関連する問題