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

Ana*_*and 1 java sorting arraylist hashmap

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

注意:如果两个键大小相同,那么我们可以按任何顺序放置它.

例如.

hm.put("abc","hi");
hm.put("A","hi");
hm.put("ab","hi");
hm.put("a","hi");
Run Code Online (Sandbox Code Playgroud)

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

有人能告诉我什么是最好的方法.

Ale*_* C. 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());
            }
});
Run Code Online (Sandbox Code Playgroud)


另一种可能性是在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());
Run Code Online (Sandbox Code Playgroud)

请注意,如果Strings你比较的长度是相同的,你必须比较它们的字典顺序,否则它只TreeSet包含Strings具有不同长度的那些(即"a"或"A"不会是添加到集)