为了账号安全,请及时绑定邮箱和手机立即绑定

在LinkedHashMap中,当accessOrder为真时,插入顺序是否随着重新插入而改变

在LinkedHashMap中,当accessOrder为真时,插入顺序是否随着重新插入而改变

郎朗坤 2023-04-19 16:23:38
在LinkedHashMap中注 1。“如果将键重新插入到地图中,插入顺序不会受到影响。”注2。“提供了一个特殊的构造函数来创建链接的哈希映射,其迭代顺序是其条目最后被访问的顺序,从最近最少访问到最近访问(访问顺序)。”询问:重新插入(put方法)是否修改了该指定条目对象的最近访问,或者它只是改变最近访问的get方法?如果accessOrder是true在构建LinkedHashMap 时,上面的“注1 ”语句是否矛盾并且影响插入顺序?更新按照下面的测试代码,put和get方法都改变了访问顺序。那么 Note 1 显然与accessOrder = trueLinkedHashMap 构造函数不正确。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}    } }
查看完整描述

1 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

当通过方法重新插入或更新映射时,插入顺序不会改变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}

但是Insertion order还是一样的,可以用 打印accessOrder = false,也就是

{1=A, 2=B, 3=C, 4=D, 5=E}

因此,插入顺序不会随着重新插入而改变,但 LinkedHashMap 中的访问顺序会改变。


查看完整回答
反对 回复 2023-04-19
  • 1 回答
  • 0 关注
  • 151 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信