Java 在LinkedHashMap中,当accessOrder为true时,插入顺序是否随重新插入而改变
在 注1。“如果将一个键重新插入到地图中,插入顺序不受影响。” 注2。提供了一个特殊的构造函数来创建一个链接的哈希映射,其迭代顺序是其条目最后一次访问的顺序,从最近一次访问到最近一次访问(访问顺序) 查询:Java 在LinkedHashMap中,当accessOrder为true时,插入顺序是否随重新插入而改变,java,collections,Java,Collections,在 注1。“如果将一个键重新插入到地图中,插入顺序不受影响。” 注2。提供了一个特殊的构造函数来创建一个链接的哈希映射,其迭代顺序是其条目最后一次访问的顺序,从最近一次访问到最近一次访问(访问顺序) 查询: 重新插入(put方法)是否修改指定条目对象的最近访问,或者只有get方法更改了最近访问 如果在构造LinkedHashMap时accessOrder为true,上面的“注释1”语句是否会冲突,插入顺序是否会受到影响 更新 根据下面的测试代码,put和get方法更改访问顺序。在LinkedHa
put
方法)是否修改指定条目对象的最近访问,或者只有get
方法更改了最近访问accessOrder
为true
,上面的“注释1”语句是否会冲突,插入顺序是否会受到影响put
和get
方法更改访问顺序。在LinkedHashMap构造函数中,注释1显然不正确
public class Main
{
public static void main(String[] args) {
LinkedHashMap<Integer, String> map = new LinkedHashMap<>(16, .75f, true);
map.put(1, "A");
map.put(2, "B");
map.put(3, "C");
map.put(4, "D");
map.put(5, "E");
System.out.println(map);// Output: {1=A, 2=B, 3=C, 4=D, 5=E}
// get method changed access order
String dummy = map.get(2);
System.out.println(map); // Output: {1=A, 3=C, 4=D, 5=E, 2=B}
// put method changed access order
map.put(1, "Z");
System.out.println(map); // Output: {3=C, 4=D, 5=E, 2=B, 1=Z}
}
}
公共类主
{
公共静态void main(字符串[]args){
LinkedHashMap=新LinkedHashMap(16.75f,真);
地图.付诸表决(1,“A”);
图.put(2,“B”);
图.put(3,“C”);
图.put(4,“D”);
地图.put(5,“E”);
System.out.println(map);//输出:{1=A,2=B,3=C,4=D,5=E}
//获取方法已更改访问顺序
字符串dummy=map.get(2);
System.out.println(map);//输出:{1=A,3=C,4=D,5=E,2=B}
//put方法已更改访问顺序
地图放置(1,“Z”);
System.out.println(map);//输出:{3=C,4=D,5=E,2=B,1=Z}
}
}
通过put
方法重新插入或更新映射时,插入顺序不会更改。根据上述示例,以下两行都将更改访问顺序,但不会更改插入顺序
map.put(1,"A");
map.put(1,"Z");
访问顺序,如果accessOrder=true
,则会根据最近访问的最少最近访问更改为最近访问,即
{2=B, 3=C, 4=D, 5=E, 1=A}
{2=B, 3=C, 4=D, 5=E, 1=Z}
但插入顺序仍然相同,可以使用accessOrder=false
打印,即
{1=A, 2=B, 3=C, 4=D, 5=E}
因此,插入顺序不会随着重新插入而改变,但访问顺序会在LinkedHashMap中发生变化。您可以轻松地自行设置一个小的演示代码来测试点#1。使用测试用例进行更新,第二个查询是主要问题,查询1只是对查询2的验证“当accessOrder为true时,插入顺序会随着重新插入而改变吗?”没什么意义。当我们将
accessOrder
设置为true
时,我们正在将LinkedHashMap
中所有条目的顺序从插入时更改为访问时。因此,由于使用中没有更多的插入顺序,因此不会受到影响(除非我误解了你的问题)。是的,一开始有点令人困惑,因为accessOrder
为true
我们正在设置新的顺序,而且它不再是按照插入顺序,确切地说,我已经在你们评论之前的回复中发布了。谢谢