我有一个HashMap
,其中的键是字符串。我需要获取密钥并根据密钥大小(即字符串长度)对其进行排序,然后将其存储在某些ArrayList
中。
注意:如果两个密钥大小相同,那么我们可以按任意顺序放置。
例如。
hm.put("abc","hi");
hm.put("A","hi");
hm.put("ab","hi");
hm.put("a","hi");
我的ArrayList应该按顺序abc,ab,a,A
包含元素。
有人可以让我知道最好的方法是什么。
答案 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”不会添加到集合中)