2016-11-29 45 views
0

我有一個由整數標識爲鍵的字符串數組的HashMap。我想通過鍵對這個HashMap進行排序。如何使用整數鍵對數組的HashMap進行排序Java

我的HashMap:HashMap<Integer, String[]> htab = new HashMap<>();

我試過TreeMap解決方案,但它並沒有我的價值觀的兼容構造(String[]):

:一組我的HashMap的 Map<Integer, String> map = new TreeMap<Integer, String>((Comparator<? super Integer>) htab);

21 : {"2","3","5","10","0"} 
+2

如果值是字符串的**數組**,則使用Map = new TreeMap <>();而不是Map '。 – Jesper

+0

是或者:Map tmap = new TreeMap (Htab) –

+0

或者您可以使用** LinkedHashMap **並排序LinkedHashMap的實例。這是一個如何按值排序LinkedHashMap並按鍵排序的示例。 [鏈接](http://stackoverflow.com/questions/12184378/sorting-linkedhashmap) – Ming

回答

0

對於您的TreeMap,您不需要(Comparator<? super Integer>)部分。你也在你的聲明中使用String而不是String[]。此代碼將工作:

SortedMap<Integer, String[]> sortedMap = new TreeMap<Integer, String[]>(Htab); 

或者你也可以聲明HTAB作爲一個TreeMap,而不是開始與一個HashMap。

0

如果你想排序鍵,你可以使用TreeSet或TreeMap如下。這些鍵自然排序,即排序由Integer類定義。

Map<Integer, String[]> map = new HashMap<>(); 

Set<Integer> naturallySortedKeys = new TreeSet<>(map.keySet()); 
Map<Integer, String[]> naturallySortedMap = new TreeMap<>(map); 
+0

他們正在尋找一個有序的映射,而不是一個排序的鍵集。 –

+0

感謝您指出。我剛剛編輯了我的答案以提供兩者。 –

0

剛剛創建TreeMapHashMap作爲參數。

public void test() { 
    Map<Integer, String[]> htab = new HashMap<>(); 
    String[] a = {"a", "3", "5", "10", "0"}; 
    htab.put(21, a); 
    String[] b = {"b", "3", "5", "10", "0"}; 
    htab.put(210, b); 
    String[] c = {"c", "3", "5", "10", "0"}; 
    htab.put(2, c); 
    Map<Integer, String[]> sorted = new TreeMap<>(htab); 
    System.out.println(htab); 
    System.out.println(sorted); 
} 
0

您可以根據jesper寫的評論使用TreeMap。

Map<Integer, String[]> map = new TreeMap<Integer, String[]>(); 
    map.put(21, new String[] {"abc","bcde", "regweger"}); 
    map.put(43, new String[] {"dbc","bgercde", "reggweer"}); 
    map.put(31, new String[] {"afbc","bcdrge", "rewgwger"}); 
    map.put(5, new String[] {"abgc","bcdee", "regwesgr"}); 
    map.put(98, new String[] {"abhhc","bc3gde", "regrer"}); 
    map.put(11, new String[] {"awqbc","bc33de", "frgeger"}); 

    System.out.println(map.toString()); 

您會發現字符串以鍵值的升序打印出元素。

相關問題