Ziy*_*ang 2 java iterator linkedhashmap
与HashMap不同,LinkedHashMap中的顺序很重要.这里的顺序是插入顺序.
假设我有一个如下所示的LinkedHashMap(从上到下排序,左边部分是键,右边部分是值):
1: "一"
2: "两个"
3: "三"
4: "四"
然后我有一个键列表,其中包含,比方说,(3,1).
我想要做的是按顺序遍历LinkedHashMap并选择其键位于列表中的条目.
所以我想要的结果是(1仍然在3之前,因为这是过滤前的顺序):
1: "一"
3: "三"
这是我的代码:
import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
public class SelectCertainEntriesFromLinkedHashMap {
public static void main(String args[]) {
Map<Integer,String> linkedHashMap = new LinkedHashMap<Integer,String>();
linkedHashMap.put(1, "One");
linkedHashMap.put(2, "Twe");
linkedHashMap.put(3, "Three");
linkedHashMap.put(4, "Four");
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(1);
Map<Integer,String> selectedlinkedHashMap = new LinkedHashMap<Integer,String>();
//will this iterator iterate the keys in the order of the map (1, 2, 3, 4)? Or just random order?
Iterator<Integer> itr = linkedHashMap.keySet().iterator();
while(itr.hasNext()) {
Integer key = itr.next();
if (list.contains(key)) {
selectedlinkedHashMap.put(key, linkedHashMap.get(key));
System.out.println(key + ":" + linkedHashMap.get(key));
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码返回我喜欢的结果.但我不确定它是否有保证.
1: "一"
3: "三"
问题是:Iterator itr = linkedHashMap.keySet().iterator(); 上面的行将从一个集合获得一个迭代器,并且没有订购.这会导致按键随机排列吗?如果是的话,我无法在过滤后保留我的地图的原始订单(不保证)....有人可以帮我这个吗?
从keySet()返回的迭代器.theerator()应该返回一个有序的Set.Map API中的文档:
The Map interface provides three collection views, which allow a map's contents to be
viewed as a set of keys, collection of values, or set of key-value mappings. The order of
a map is defined as the order in which the iterators on the map's collection views return
their elements. Some map implementations, like the TreeMap class, make specific guarantees
as to their order; others, like the HashMap class, do not.
Run Code Online (Sandbox Code Playgroud)
所以在LinkedHashMap案例中,我将其解释为说迭代器将返回一个有序的Set.这是真的,LinkedHashMap API没有明确这个,但你可以尝试一下,观察你的输出.
当您调用时keySet()
,它会根据基础数据创建密钥视图.诚然,这不是很清楚的记载,但因为它是只是一个观点,那将是令人难以置信的怪异该视图以不同的顺序重复.
您可以检查当然的实施,但我确定它没问题.
归档时间: |
|
查看次数: |
2130 次 |
最近记录: |