面试题:HashMap循环遍历时,输出顺序会不会改变?修改元素值会影响打印顺序吗?

今天在面试的时候,被面试官的一个问题很有意思,HashMap循环遍历时,输出顺序会不会改变?修改元素值会影响打印顺序吗?

我当时回答的是:循环遍历不会,但修改会影响打印顺序,因为修改后hashCode值发生了改变。 (这里回答的不对)

先拿事实说话,上代码:

        Map<UserEntity,String> hashMap = new HashMap<UserEntity,String>();
        UserEntity e =  new UserEntity();
        e.setAge(30);
        e.setName("wangwu");
        hashMap.put(e,"1");
        hashMap.put(new UserEntity("wangwu",58),"2");
        hashMap.put(new UserEntity("wangwu",20),"3");
        hashMap.forEach((UserEntity,String) ->System.out.println(UserEntity.toString()+"---"+String));
        System.out.println("修改后:---");
        //hashMap.put(new UserEntity("hehe",18),"4");
        e.setName("999");
        e.setAge(800);
        hashMap.forEach((UserEntity,String) ->System.out.println(UserEntity.toString()+"---"+String));

 结果:

UserEntity{name='wangwu', age=30}---1
UserEntity{name='wangwu', age=58}---2
UserEntity{name='wangwu', age=20}---3
修改后:---
UserEntity{name='999', age=800}---1
UserEntity{name='wangwu', age=58}---2
UserEntity{name='wangwu', age=20}---3

修改不会影响打印顺序

原因:

因为HashMap的value的存储位置是通过HashCode的值确定的。但是,key是在数组中存放的,HashMap循环遍历的顺序是:根据数组顺序+单链表顺序进行输出。可以简单理解为,两层循环输出数据,外层循环为遍历数组,内层循环为遍历单链表。

所以我们修改的只是数组里的key的值,所以不会改变打印顺序的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值