对HashMap键进行排序并存储在ArrayList中

时间:2014-03-20 07:48:44

标签: java arraylist hashmap

我需要完成排序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;
    }

我已经运行它并且工作正常。

只想知道是否有更好的方法来实现相同的

3 个答案:

答案 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());

有了这个你:

  1. 获取密钥集,为Set<String>
  2. 将其换成Stream<String>
  3. 通过sorted()对其进行排序。
  4. 将其收集到List<Stream>提供的Collectors.toList(),这将是ArrayList<String>,因为没有指定其他约束。
  5. 它可能比Java 7中的负担更多,但我想说一旦你知道了Stream的API,它就会大致相同,当你添加其他约束时它会变得更有趣。然后真正的利润显示出来。