在string []中存储hashmap的键值

时间:2011-09-14 11:11:51

标签: java hashmap

获得解决方案..使用linkedHashMap并能够将排序的键值存储在数组中。 Here是代码的链接。

  

可能重复:
  store key values of sorted hashmap in string[]

我创建了一个hashmap,然后使用this code“按值排序”地图中的元素。 代码工作,我能够在屏幕上显示按值排序的键值对。

现在我想将密钥(来自已排序的元素)存储在String[]中。 <{1}}没有帮助,因为已经退出的HashMap没有排序。

有人可以建议一种方法吗?

进一步澄清情况 - 假设我有关键值对,如(a,1)(b,23)(c,7) 通过使用上面的链接,我能够得到(a,1)(c,7)(b,23)作为输出。我想将{a,c,b}存储为字符串数组。 我希望现在问题很清楚。

5 个答案:

答案 0 :(得分:1)

重复使用此代码,您只需使用

List keys = sortByValue(m);
String[] keyArray = keys.toArray(new String[keys.size()]);

使用泛型会使这更好。我也会按Map.Entry(来自entrySet())排序,这样会更快更简单。

答案 1 :(得分:0)

我会使用Google Collection:

    Map<String, String> map = new HashMap<String, String>( );
    map.put("ABC1", "VALUE1");
    map.put("ABC7", "VALUE1");
    map.put("ABC2", "VALUE2");
    map.put("ABC3", "VALUE1");

    Multimap multimap = TreeMultimap.create();

    for(Map.Entry<String, String> entry: map.entrySet() ) {
         multimap.put( entry.getValue(), entry.getKey() );
    }


    System.out.println( Arrays.toString( multimap.values().toArray() ));

答案 2 :(得分:0)

对我的键进行排序很简单,请使用TreeMap

TreepMap sortedMap = new TreeMap(someHashMap);
String[] sortedKeys = sortedMap.keySet().toArray();

答案 3 :(得分:0)

该代码实际上并没有对HashMap进行排序 - 它只是返回键,按其值排序:

所以你需要的只是:

Object[] key_array = sortByValue(m).toArray();

答案 4 :(得分:0)

我要去像

这样的东西
private static String[] keysSortedByValue(final Map<String, String> m) {
    final String[] result = m.keySet().toArray(new String[m.size()]);
     Arrays.sort(result, new Comparator<String>() {
         @Override
         public int compare(String o1, String o2) {
             final String v1 = m.get(o1);
             final String v2 = m.get(o2);
             if (v1==v2) return 0;
             if (v1==null) return -1;
             if (v2==null) return +1;
             return v1.compareTo(v2);
         }
     });
     return result;
}

或使用Map.Entry[]以提高效率(避免查找)。