gpt4 book ai didi

java - 给定 Map 的不同 Collection View 的迭代顺序是否保证一致?

转载 作者:搜寻专家 更新时间:2023-10-31 19:44:40 25 4
gpt4 key购买 nike

对于给定类型的 Map,是否可以保证遍历由 keySetvalues 返回的 Collection View >entries 方法以相同的顺序迭代?

背景:我在想要不要转型

public static void doSomethingForEachEntry(Map<String, Integer> someMap) {

for (String key : someMap.keySet()) {
doSomething(someMap.get(key));
}
}

public static void doSomethingForEachEntry(Map<String, Integer> someMap) {

for (Integer value : someMap.values()) {
doSomething(value);
}
}

保证迭代顺序不变。

最佳答案

虽然您确实不能依赖特定顺序,除非Map 实现明确定义它,但有一句话in the API documentation这意味着 map 及其所有 Collection View 有一个共享的顺序:

The order of a map is defined as the order in which the iterators on the map's collection views return their elements.

(我的重点)

为了满足这一点, map 有一个固有的顺序(即使它可能没有指定,并且可能随着 map 的修改而改变),并且所有 Collection View 都必须对应于这个顺序。这是否构成保证,尤其是所有第三方 map 实现是否会遵守它,是另一个问题。

同样值得注意的是,这些在 Map 接口(interface)中明确定义为 map 支持的 View ,(例如,如果您从 keySet,相应的 Map 条目必须从 map 中删除)。这意味着在现实中,您从正确的 Map 实现中获得不同顺序的可能性比例如您制作 Collection View 的浅拷贝要小。

说了这么多,如果问题是“这是一个安全的重构吗?”那么答案是“是的,只要原始代码本身没有被破坏”。如果该方法依赖于特定的顺序,因此依赖于特定的 Map 实现,则应声明该方法仅接受该类型的 Map。否则,如果底层 Map 实现发生变化,您就有了潜在的定时炸弹(我已经看到现实生活中的软件因 JDK 更新而中断)。

如果一个特定的调用者依赖于一个特定的顺序,因为它知道它正在传递一个有序的 Map 实现,那很好,并且该顺序将在您的重构后保留。

关于java - 给定 Map 的不同 Collection View 的迭代顺序是否保证一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34989708/

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