在Java中有序列表Map实现(Ordered List Map implementation in

2019-07-31 04:40发布

我在想,如果有一类在那里,同时实现了MapList中的Java接口。

我有一个数据结构,它主要是一个Map 。 我映射字符串(标识),以Image秒。 但在我的代码的特定部分,我需要所有可用的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:看来我举棋不定。 我需要的是一个有序图,而不是有序的。 很抱歉的混乱,人。

Answer 1:

如果你需要在一个特定的顺序您的项目, LinkedHashMap的是你的朋友-它保持在插入订单项目。 TreeMap的将保持由您给一个比较器或按键的compareTo方法定义的顺序您的项目。



Answer 2:

对于一个有序图,看看LinkedHashMap 。 这将保持插入的顺序钥匙。

如果您使用SortedMap它会继续在有序的按键。 (该TreeMap是最常见的实现。)

你可以使用的map.entrySet() 这将允许您遍历集合MapEntries的。

退房的javadoc了位更多信息。



Answer 3:

你一定已经是一堆实用的答案。 但直接回答这个问题......

我是游荡,如果有一类在那里,同时实现了地图和Java列表界面。

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

Map界面的签名是:

V remove(Object key);

而在List界面是:

boolean remove(Object o);


Answer 4:

你可以使用Map.values()方法,它返回一个Collection



Answer 5:

这使您的存储值的集合

myMap.values()


Answer 6:

试试这个:

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

对于有序映射看java.util.SortedMap实现。 java.util.TreeMap是最常见的选择。 如果你只需要保证迭代顺序,你可以尝试java.util.LinkedHashMap 。 它提供了迭代以相同的顺序,你把元素映射。 或者,可选的,在最后访问的顺序。 如果你想移动键(添加一次),以图结束,你必须明确地将其删除,然后重新插入。



Answer 7:

你可以使用一个TreeMap中是根据其键的自然顺序进行排序,或者根据创建映射时提供的比较:

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

其中ByNameComparator()是一个比较器。 另外,您可以使用使用Collections.sort()()的值methond和排序:

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


文章来源: Ordered List Map implementation in Java
标签: java list map