如何在java中使用EnumMap保留顺序

时间:2017-06-05 21:53:19

标签: java

我有一个我正在使用的EnumMap,我将需要保留我传入的项目的顺序。我知道在使用HashMap时,我可以初始化LinkedHashMap以便像这样保留顺序:

HashMap<String, List<String>> contentTypeToIdList = new LinkedHashMap<String, List<String>>();

但是,我想改用EnumMap。我怎么能做这样的事情:

EnumMap<ContentType, List<String>> contentTypeToIdList = new LinkedHashMap<ContentType, List<String>>();

3 个答案:

答案 0 :(得分:3)

正如API告诉我们的那样:

  

枚举映射按其键的自然顺序(声明枚举常量的顺序)进行维护。这反映在集合视图(keySet(),entrySet()和values())返回的迭代器中。

这意味着它是内部排序的,根本不应该以不同方式排序,例如您需要的插入顺序。

答案 1 :(得分:1)

你真的不需要EnumMap。你可以使用LinkedHashMap轻松使用 ,但你必须注意你所关注的内容。

Map<ContentType, List<String>> contentTypeToIdList = new LinkedHashMap<>();

这将:

  • 使用LinkedHashMap
  • 确保相对于添加密钥(及其值)的插入顺序

答案 2 :(得分:0)

一些可能性:

  • 每次需要时使用LinkedHashMapconstruct an EnumMap
  • 正如biziclop在评论中所建议的那样,扩展EnumMap
  • 我打算建议扩展或修改ContentType以包含可变的静态排序信息,这可能是非常hacky但可能还可以进行测试。但我更喜欢上述两个想法。