hashmap的工作原理
HashMap基于hashing原理,通过get()和put()方法来存储和获取对象,当我们将键值对传递给put()方法时,他调用键对象的hashcode方法来计算hashcode值,然后找到bucket位置来存储对象,当获取对象时吗,通过键对象的equals方法找到正确的键值对,然后返回值对象,HashMap使用链表来解决碰撞问题,当发生碰撞了,对象将会储存在链表的下一个节点中。 HashMap在每个链表节点中储存键值对对象。
hashmap和hashtable的区别
主要区别分为:线程安全,同步(synchronization),速度。
同步:HashMap不是线程同步的,而hashtable是线程同步的。
线程安全:hashmap不是线程安全的,而hashtable是线程安全的。
速度:hashmap速度比hashtable速度快。
我们能否让HashMap同步?
HashMap可以通过下面的语句进行同步:
Map m = Collections.synchronizeMap(hashMap);
HashMap和HashSet的区别
HashMap和HashSet的区别是Java面试中最常被问到的问题。如果没有涉及到Collection框架以及多线程的面试,可以说是不完整。而Collection框架的问题不涉及到HashSet和HashMap,也可以说是不完整。HashMap和HashSet都是collection框架的一部分,它们让我们能够使用对象的集合。collection框架有自己的接口和实现,主要分为Set接口,List接口和Queue接口。它们有各自的特点,Set的集合里不允许对象有重复的值,List允许有重复,它对集合中的对象进行索引,Queue的工作原理是FCFS算法(First Come, First Serve)。
hashset
hashset实现了collection的set接口,他不允许集合中出现重复的值,将对象存储到hashset之前要将对象的hashcode方法和equals方法重写,主要用来比较对象的值是否相等,以确保不会重复出现同样的值。
hashmap
hashmap实现了map接口。map接口键值对进行映射,map中不允许出现重复的键。map接口有两个实现,分别时hashmap和treemap。treemap保存了对象的排列序列,而hashmap则不然,HashMap允许键和值为null。HashMap是非synchronized的,但collection框架提供方法能保证HashMap synchronized,这样多个线程同时访问HashMap时,能保证只有一个线程更改Map。
转自该博客