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),新加入的放在链头,最先加入的放在链尾。

猜你喜欢

转载自blog.csdn.net/WG102753/article/details/107648381