LinkedHashMap 中的集合(值)是否保留插入顺序?
Does a collection (values) from LinkedHashMap preserve the insertion order?
假设我有一个 LinkedHashMap<String, Double> myMap
,我添加了 pair1
、pair2
、pair3
对。
现在我执行以下循环:
for (Double currDouble : myMap.getValues()) {...}
循环中的第一个 Double
对象会是 pair1
中的一个吗? pair2
中的第二个?还是不必如此?
我用类似的程序检查过,它似乎确实保持了插入顺序,但情况总是如此吗?
默认情况下,LinkedHashMap
保留插入顺序。虽然有一个选项可以切换到访问顺序,但这可能是一个令人困惑的因素。
所以要回答你的问题,是,第一个 Double
来自 pair1
,第二个来自 pair2
等等。给定事实上,您没有将 LinkedHashMap
设置为访问顺序。
如果您仍然不确定该行为,您可以随时通过将一堆数据添加到 LinkedHashMap
来测试它,然后像您在问题中描述的那样对其进行迭代。您会看到它将保留插入顺序(或访问顺序,如果已设置)。
见Java Class that implements Map and keeps insertion order?
你可以这样做:
for (String key : myMap.getKeys())
Double d = myMap.get(key);
是的!
来自 LinkedHashMap 文档的第一句:
... Map 接口的实现,具有可预测的迭代顺序....这通常是将键插入地图的顺序(插入顺序)。
如果重新插入密钥(可能具有不同的值),它不会更改原始顺序。
假设我有一个 LinkedHashMap<String, Double> myMap
,我添加了 pair1
、pair2
、pair3
对。
现在我执行以下循环:
for (Double currDouble : myMap.getValues()) {...}
循环中的第一个 Double
对象会是 pair1
中的一个吗? pair2
中的第二个?还是不必如此?
我用类似的程序检查过,它似乎确实保持了插入顺序,但情况总是如此吗?
默认情况下,LinkedHashMap
保留插入顺序。虽然有一个选项可以切换到访问顺序,但这可能是一个令人困惑的因素。
所以要回答你的问题,是,第一个 Double
来自 pair1
,第二个来自 pair2
等等。给定事实上,您没有将 LinkedHashMap
设置为访问顺序。
如果您仍然不确定该行为,您可以随时通过将一堆数据添加到 LinkedHashMap
来测试它,然后像您在问题中描述的那样对其进行迭代。您会看到它将保留插入顺序(或访问顺序,如果已设置)。
见Java Class that implements Map and keeps insertion order?
你可以这样做:
for (String key : myMap.getKeys())
Double d = myMap.get(key);
是的!
来自 LinkedHashMap 文档的第一句: ... Map 接口的实现,具有可预测的迭代顺序....这通常是将键插入地图的顺序(插入顺序)。
如果重新插入密钥(可能具有不同的值),它不会更改原始顺序。