gpt4 book ai didi

java - 如何从 Java 中的特定键值开始迭代 HashMap?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:40:25 25 4
gpt4 key购买 nike

有没有一种方法可以从特定键开始 HashMap 中的迭代?

假设我的 map 是:

Map map = new HashMap();
map.put(1,"A");
map.put(2,"B");
map.put(3,"B");
map.put(4,"B");
map.put(5,"F");
map.put(6,"Z");

我希望迭代从键 2 开始。

常规迭代涉及:

public static void printMap(Map map) {
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pair = (Map.Entry)it.next();
System.out.println(pair.getKey() + " = " + pair.getValue());
}
}

但是如何从特定的键开始迭代呢?

最佳答案

您的问题是基于对 HashMap 是什么的误解。特别是,如果您从键 2 开始并迭代剩余的条目,不能保证您会得到键为 2 的条目, 3456 ...按此顺序或按任何顺序。

HashMap 的迭代顺序是未定义的,并且在大多数情况下是不可预测的。

但是...如果您使用 LinkedHashMapTreeMap 并迭代条目,那么您将按照定义的顺序获取它们:

  • LinkedHashMap 会(通常)按插入顺序给出条目
  • TreeMap 将按照键的比较顺序给出条目。

如果您使用 LinkedHashMap,从给定键(按插入顺序)开始获取所有条目的方法是从头开始迭代,直到找到您想要的键。例如:

public static void printMapFrom(LinkedHashMap<K, V> map, K from) {
boolean found = false;
for (Map<K, V>.Entry entry : map.entrySet()) {
if (!found && !from.equals(entry.getKey())) {
continue;
}
found = true;
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}

如果您使用TreeMap,方法是使用tailMap(key) 获取从键到末尾的条目子图。然后迭代子图。

public static void printMapFrom(SortedMap<K, V> map, K from) {
for (Map<K, V>.Entry entry : map.tailMap(from).entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
}

如果您真的不关心 HashMap 中键的顺序是不确定的,那么您可以使用上面的 LinkedHashMap 版本和一个普通的 HashMap ConcurrentHashMap

关于java - 如何从 Java 中的特定键值开始迭代 HashMap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40689813/

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