Java中的有序列表映射实现

时间:2009-07-31 12:11:34

标签: java list map

我想知道是否有一个类在Java中实现了MapList接口。

我的数据结构主要是Map。我将字符串(ID)映射到Image s。但是在我的代码的特定部分中,我需要向用户显示所有可用的IDed Images。到目前为止,唯一的方法就是写下这个:

for (String id : myMap.keySet()) {
    // get the image like this "myMap.get(id)" 
}

所以有一个实现MapList的类会很好,所以我可以简单地写一下:

for (Image img : myMap) {
  // the image is img
}

有谁知道这样的实现?

编辑:在查看答案(这些都是正确的,已投票)之后,我现在意识到我还需要对地图进行排序。当我说“排序”时,我的意思是我希望它以特定的顺序获得值,我可以修改它。我知道这不是原来的问题,但我才意识到我需要这个。

编辑2 :我似乎优柔寡断。我需要的是有序地图,而不是有序地图。很抱歉让人感到困惑。

7 个答案:

答案 0 :(得分:35)

如果您需要特定订单中的商品,LinkedHashMap是您的朋友 - 它会按照广告订单的顺序保留商品。 TreeMap会将您的项目保存在您提供的比较器或密钥的compareTo方法定义的顺序中。

答案 1 :(得分:19)

对于有序地图,请查看LinkedHashMap。这将使您的密钥按插入顺序排列。

如果您使用SortedMap,它会按键排序。 (TreeMap是最常见的实现。)

您可以使用map.entrySet()。这将允许您迭代Set of MapEntries。

查看javadoc了解更多信息。

答案 2 :(得分:8)

你已经有了很多实际的答案。但直接回答这个问题......

  

如果有一个类在Java中实现了Map和List接口,我就会徘徊。

......值得一提的是,这根本不可能。 remove(Object)方法是障碍。

Map界面中,其签名为:

V remove(Object key);

List界面中,它是:

boolean remove(Object o);

答案 3 :(得分:3)

您可以使用Map.values()方法,该方法返回Collection

答案 4 :(得分:2)

这为您提供了存储值的集合

myMap.values()

答案 5 :(得分:2)

试试这个:

for (Image img : myMap.values()) {
    // the image is img
}

有关排序的地图,请查看java.util.SortedMap实施。 java.util.TreeMap是最常见的选择。如果您只需要保证迭代顺序,可以尝试java.util.LinkedHashMap。它提供的迭代顺序与放置元素到映射的顺序相同。或者,可选地,在最后访问的顺序中。如果您想将键(一旦添加)移动到地图的末尾,则必须明确删除它并重新放置。

答案 6 :(得分:0)

您可以使用TreeMap根据其键的自然顺序或在地图创建时提供的比较器进行排序:

TreeMap<String, Image> mapByName = new TreeMap<String, Image>(new ByNameComparator());

其中ByNameComparator()是比较器。或者,您可以使用values()methond并使用Collections.sort()进行排序:

Collection<Image> images = mapByName.values();
Collections.sort(images, new BySizeComparator());