Java有序地图

在Java中,有没有一个像Map一样存储和访问键/值对的对象,但是可以返回一个有序的键列表和一个有序的值列表,这样键和值列表的顺序是相同的?

所以作为解释的代码,我正在寻找一些像我虚构的OrderedMap:

OrderedMap<Integer, String> om = new OrderedMap<>(); om.put(0, "Zero"); om.put(7, "Seven"); String o = om.get(7); // o is "Seven" List<Integer> keys = om.getKeys(); List<String> values = om.getValues(); for(int i = 0; i < keys.size(); i++) { Integer key = keys.get(i); String value = values.get(i); Assert(om.get(key) == value); } 

SortedMap接口(带有实现TreeMap )应该是你的朋友。

界面有这样的方法:

  • keySet()返回一组键以升序排列
  • values()以相应的键的升序返回所有值的集合

所以这个界面完全符合你的要求。 但是,键必须有一个有意义的顺序。 否则,您可以使用LinkedHashMap ,其顺序由插入顺序决定。

是否有一个对象像Map一样用于存储和访问键/值对,但可以返回一个有序的键列表和一个有序的值列表,这样键和值列表的顺序是相同的?

你正在寻找java.util.LinkedHashMap 。 你会得到一个Map.Entry <K,V>对的列表,它们总是以相同的顺序迭代。 该顺序与您放置项目的顺序相同。或者,使用java.util.SortedMap ,其中键必须具有自然顺序或由Comparator指定。

LinkedHashMap维护键的顺序。

java.util.LinkedHashMap看起来像正常的HashMap一样工作。

我认为从框架中得到最接近的集合是SortedMap

我认为SortedMap接口强制你要求和TreeMap实现。

http://java.sun.com/j2se/1.5.0/docs/api/java/util/SortedMap.html http://java.sun.com/j2se/1.5.0/docs/api/java/util /TreeMap.html

自Java 6以来,对于TreeMap也是非阻塞线程安全的替代scheme。 请参阅ConcurrentSkipListMap 。

您可以利用NavigableMap接口,该接口可以按照升序或降序键的顺序访问和遍历。 此接口旨在取代 SortedMap接口。 导航地图通常按照其按键的自然sorting或在地图创build时提供的比较器进行sorting。

它有三个最有用的实现: TreeMap , ImmutableSortedMap和ConcurrentSkipListMap 。

TreeMap示例:

 TreeMap<String, Integer> users = new TreeMap<String, Integer>(); users.put("Bob", 1); users.put("Alice", 2); users.put("John", 3); for (String key: users.keySet()) { System.out.println(key + " (ID = "+ users.get(key) + ")"); } 

输出:

 Alice (ID = 2) Bob (ID = 1) John (ID = 3)