与HashMap不同,LinkedHashMap保持顺序。而这个顺序是插入顺序。
假设我有一个LinkedHashMap,如下所示(从上到下排序,左侧是键,右侧是值):
1:“One” 2:“Two” 3:“Three” 4:“Four”
然后我有一个包含(3,1)的键列表。
我想要做的是按顺序遍历LinkedHashMap并挑选出其键在列表中的条目。
所以我想要的结果是(1仍然在3之前,因为那是过滤之前的顺序):
1:“One” 3:“Three”
以下是我的代码:
假设我有一个LinkedHashMap,如下所示(从上到下排序,左侧是键,右侧是值):
1:“One” 2:“Two” 3:“Three” 4:“Four”
然后我有一个包含(3,1)的键列表。
我想要做的是按顺序遍历LinkedHashMap并挑选出其键在列表中的条目。
所以我想要的结果是(1仍然在3之前,因为那是过滤之前的顺序):
1:“One” 3:“Three”
以下是我的代码:
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));
}
}
}
}
以上代码返回了我想要的结果。但我不确定它是否有保证。
1:“一”
3:“三”
问题是: Iterator itr = linkedHashMap.keySet().iterator(); 上面这行代码将从一个集合中获取一个迭代器,而该集合没有顺序。那么这会导致键以随机顺序排列吗?如果是的话,我就不能在过滤后保持原始顺序(没有保证)…… 有人能帮我解决这个问题吗?