根据密钥大小对HashMap密钥进行排序

时间:2014-03-20 11:55:52

标签: java sorting arraylist hashmap

我有一个HashMap,其中的键是字符串。我需要获取密钥并根据密钥大小(即字符串长度)对其进行排序,然后将其存储在某些ArrayList中。

注意:如果两个密钥大小相同,那么我们可以按任意顺序放置。

例如。

hm.put("abc","hi");
hm.put("A","hi");
hm.put("ab","hi");
hm.put("a","hi");

我的ArrayList应该按顺序abc,ab,a,A包含元素。

有人可以让我知道最好的方法是什么。

1 个答案:

答案 0 :(得分:5)

您可以使用这样的自定义Comparator按长度对键进行排序:

List<String> s = new ArrayList<>(hm.keySet());
Collections.sort(s, new Comparator<String>(){
            @Override
            public int compare(String s1, String s2){
                 return Integer.compare(s2.length(), s1.length());
            }
});

<小时/> 另一种可能性是使用TreeSet在此处为其构造函数提供自定义Comparator

TreeSet<String> ts = new TreeSet<>(new Comparator<String>(){
                     @Override
                     public int compare(String s1, String s2){
                           int cmp = Integer.compare(s2.length(), s1.length());
                           return cmp != 0 ? cmp : s1.compareTo(s2);
                     }
});
ts.addAll(hm.keySet());

请注意,如果您比较的Strings对的长度相同,则必须比较它们的词典顺序,否则TreeSet只会包含Strings具有不同长度的(即“a”或“A”不会添加到集合中)

相关问题