面试
2020-04-04 本文已影响0人
Alan_a731
1.重写equals()为什么必须重写hashcode()方法
相等的对象必须拥有相等的hash code。所以我们得到一个结论:如果一个类重写了equals方法但是没有重写hashCode方法,那么该类无法结合所有基于散列的集合(HashMap,HashSet)一起正常运作。
2.hashcode()和equals()区别
3.HashMap底层实现原理
HashMap基于散列原理。通过put()和get()方法储存和获取对象。当将键值对传递给put()方法时,它调用键对象的hashCode()方法来计算hashcode,让后找到桶位置来储存值对象。当获取对象时,通过键对象的equals()方法找到正确的键值对,然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。
4.HashMap和Hashtable的区别
HashMap和Hashtable都实现了Map接口,主要的区别有:线程安全性,同步(synchronization),以及速度。
4.1 HashMap是非synchronized的,并可以接受null key和null值,而Hashtable则不行。
4.2 Hashtable是线程安全的
4.3HashMap的迭代器是fail-fast迭代器,而Hashtable的enumerator迭代器不是。