Java岗面试题--Java基础(日积月累,每日三题)

面试题一:HashMap 中是怎么判断一个元素是否相同的呢?

首先会比较「hash值」,随后会用「== 运算符和 equals()」来判断该元素是否相同。

说白了就是:如果只有 hash 值相同,那说明该元素哈希冲突了,如果 hash 值和 equals() 或 == 都相同,那说明该元素是同一个。

  1. HashMap 判断 Key 是否相同;
  2. 对比 hash 值,对比 equals。

面试题二:HashMap 是线程安全的吗?

HashMap 不是线程安全的,在多线程环境下,HashMap 有可能会有数据丢失和获取不了最新数据的问题,比如说:线程A put 进去了,线程B get 不出来。

如果没有 hash 碰撞则会直接插入元素。如果 线程A 和 线程B 同时进行 put 操作,刚好这两条不同的数据 hash 值一样,并且该位置数据为 null,所以这 线程A、B 都会对该位置进行插入。

假设一种情况,线程 A 进入后还未进行数据插入时挂起,而线程 B 正常执行,从而正常插入数据,然后线程 A 获取 CPU 时间片,此时线程 A 不用再进行 hash 判断了,问题出现:线程 A 会把线程 B 插入的数据给覆盖,发生线程不安全。

HashMap的死循环(jdk 1.8 以下)

Java面试题:高并发环境下,HashMap可能出现的致命问题。注意:是在jdk8以下版本

HashMap 的 7 种遍历方式与性能分析

HashMap 的 7 种遍历方式与性能分析

面试题三:一般用什么作为HashMap的key?

一般用 Integer、String 这种不可变类当 HashMap 当 key,而且 String 最为常用。

因为字符串是不可变的,所以在它创建的时候 hashcode 就被缓存了,不需要重新计算。这就是 HashMap 中的键往往都使用字符串的原因。因为获取对象的时候要用到 equals() 和 hashCode() 方法,那么键对象正确的重写这两个方法是非常重要的,这些类已经很规范的重写了 hashCode() 以及 equals() 方法。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SuZhan7710

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值