gpt4 book ai didi

java - 获取LinkedHashMap的一个子集并保留顺序

转载 作者:行者123 更新时间:2023-12-03 23:13:37 25 4
gpt4 key购买 nike

与 HashMap 不同,LinkedHashMap 中的顺序很重要。这里的顺序是插入顺序。

假设我有一个如下所示的 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:"One"

3:"Three"



问题是:
迭代器 itr = linkedHashMap.keySet().iterator();
上面的行将从集合中获取迭代器,并且集合没有排序。那么这会导致 key 以随机顺序排列吗?如果是,我不能在过滤后保持我的 map 的原始顺序(不保证)....
有人可以帮我解决这个问题吗?

最佳答案

从 keySet().iterator() 返回的迭代器应该返回一个有序的 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.

所以在 LinkedHashMap 的情况下,我将其解释为迭代器将返回一个有序集合。是真的 LinkedHashMap API对此并不明确,但您可以尝试一下并观察您的输出。

关于java - 获取LinkedHashMap的一个子集并保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039427/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com