Java开发工程师面试题

##Java开发工程师面试题

一、两个对象的hashcode()相同,equals()不一定true,对吗?

答:不对,两个对象的hashcode()相同,equals()不一定为true。
解析:
1、hashcode是哈希码,但是哈希码并不是完全唯一的,它是一种算法。让同一个类的对象按照自己不同的特征尽量的有不同的哈希码,但不表示不同的对象哈希码完全不同。
如下代码:

public class StringDemo {
 public static void main(String[] args) {
  String string="BB";
  String string2 = "Aa";
  System.out.println(string.hashCode());
  System.out.println(string2.hashCode());
  System.out.println(string.equals(string2));
 }}
 运行结果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200728233020807.JPG#pic_center)

2equals()是比较两个字符串是否相同,在比较过程中,先比较字符串的地址,再比较两个字符串的内容是否相同,只有但两者同时相等的时候,equals()方法的结果才为true。
相关问题:

## 二、equals()==的区别?

equals()先比较地址,再比较值。
"=="直接比较值。
## hashMap的实现原理?
答:在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。
HashMap是基于hashing的原理,我们使用put(key, value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当我们给put()方法传递键和值时,我们先对键调用hashCode()方法,返回的hashCode用于找到数组中的位置来储存Entry对象。当对象的hashcode相同时,它们在数组中的位置相同,“碰撞”会发生。因为HashMap使用线性链表存储对象,这个Entry会存储在线性链表中。将会调用key的eqauls()方法比较决定是采用覆盖行为(返回 true),还是产生 Entry 链(返回 false),新加入的放在链头,最先加入的放在链尾。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值