我需要完成排序HashMap
键的任务,这些键将始终为String并将它们存储在ArrayList
中。我在下面写了一段代码
public static List<String> getSortedListByKeys(HashMap<String,String> keysDictionary)
{
List<String> sortedKeysList = null;
SortedSet<String> sortedKeysSet = null;
if(keysDictionary == null || keysDictionary.size() == 0){
return null;
}
sortedKeysSet = new TreeSet<>(keysDictionary.keySet());
sortedKeysList = new ArrayList<>(sortedKeysSet);
return sortedKeysList;
}
我已经运行它并且工作正常。
只想知道是否有更好的方法来实现相同的
答案 0 :(得分:2)
由于您希望根据自然排序本身对字符串进行排序,因此您可以直接创建列表并在其上使用Collections.sort()
。
sortedKeysList = new ArrayList<>(keysDictionary.keySet());
Collections.sort(sortedKeysList);
这样您就可以避免使用SortedSet
作为中间步骤。
答案 1 :(得分:0)
我认为你绝对应该考虑使用TreeMap,插入和检索会稍慢一点(O(log(N)而不是O(1))但是你的密钥已经按照正确的顺序排序了。
TreeMap的Java文档:http://docs.oracle.com/javase/6/docs/api/java/util/TreeMap.html
答案 2 :(得分:0)
使用Java 8,您可以通过以下方式轻松完成:
Map<String, String> keysDictionary = new HashMap<>();
List<String> sortedKeys = keysDictionary.keySet().stream()
.sorted()
.collect(Collectors.toList());
有了这个你:
Set<String>
。Stream<String>
。sorted()
对其进行排序。List<Stream>
提供的Collectors.toList()
,这将是ArrayList<String>
,因为没有指定其他约束。它可能比Java 7中的负担更多,但我想说一旦你知道了Stream
的API,它就会大致相同,当你添加其他约束时它会变得更有趣。然后真正的利润显示出来。