我在想,如果有一类在那里,同时实现了Map
和List
中的Java接口。
我有一个数据结构,它主要是一个Map
。 我映射字符串(标识),以Image
秒。 但在我的代码的特定部分,我需要所有可用的IDed向用户呈现Images
。 要做到这一点,到目前为止,唯一的方法是这样写:
for (String id : myMap.keySet()) {
// get the image like this "myMap.get(id)"
}
因此,这将是不错的同时实现一类Map
和List
,所以我可以简单的写:
for (Image img : myMap) {
// the image is img
}
有谁知道这样一个实现的?
编辑 :查看答案后(这是正确的,投了),我现在意识到我还需要进行排序的映射。 当我说“分类”,所有我的意思是,我想它有特定的顺序,一个是我将能够修改值。 我知道这是不是原来的问题,但我意识到,我需要的。
编辑2:看来我举棋不定。 我需要的是一个有序图,而不是有序的。 很抱歉的混乱,人。
如果你需要在一个特定的顺序您的项目, LinkedHashMap的是你的朋友-它保持在插入订单项目。 TreeMap的将保持由您给一个比较器或按键的compareTo方法定义的顺序您的项目。
对于一个有序图,看看LinkedHashMap
。 这将保持插入的顺序钥匙。
如果您使用SortedMap
它会继续在有序的按键。 (该TreeMap
是最常见的实现。)
你可以使用的map.entrySet()
这将允许您遍历集合MapEntries的。
退房的javadoc了位更多信息。
你一定已经是一堆实用的答案。 但直接回答这个问题......
我是游荡,如果有一类在那里,同时实现了地图和Java列表界面。
......这是值得一提的是这是根本不可能的。 remove(Object)
的方法是障碍。
在Map
界面的签名是:
V remove(Object key);
而在List
界面是:
boolean remove(Object o);
你可以使用Map.values()
方法,它返回一个Collection
。
试试这个:
for (Image img : myMap.values()) {
// the image is img
}
对于有序映射看java.util.SortedMap
实现。 java.util.TreeMap
是最常见的选择。 如果你只需要保证迭代顺序,你可以尝试java.util.LinkedHashMap
。 它提供了迭代以相同的顺序,你把元素映射。 或者,可选的,在最后访问的顺序。 如果你想移动键(添加一次),以图结束,你必须明确地将其删除,然后重新插入。
你可以使用一个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());