Java中的有序列表映射实现

我想知道是否有一个类在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 :我似乎优柔寡断。 我需要的是有序地图,而不是有序地图。 对不起,人们有困惑。

如果您需要特定订单中的商品, LinkedHashMap就是您的朋友 – 它会按照插入顺序保留商品。 TreeMap将使您的项目保持在由您提供的比较器或键的compareTo方法定义的顺序中。

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

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

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

查看javadoc以获取更多信息。

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

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

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

Map界面中,它的签名是:

 V remove(Object key); 

List界面中它是:

 boolean remove(Object o); 

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

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

 myMap.values() 

尝试这个:

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

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

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

 TreeMap mapByName = new TreeMap(new ByNameComparator()); 

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

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