HashMap个人学习

HashMap知识学习第一天(也不知道能坚持几天);

以前对hashmap的了解只限于他是一个莽撞的小伙子,线程不安全,以key/value形式存储的集合,他们可以是一穷二白的null。好吧想不起来从新学习吧。

理论知识(主体为应付面试,其中三四个点为自己的知识点):

HashMap是基于哈希表的接口Map实现的(哈希表理解需要加入学习进程),此类不保证映射顺序,特别不保证映射顺序恒久不变。HashMaop是java开发人员使用最多的映射关系的数据类型,jdk1.8对hashmap底层实现进行了优化,例如:加入了红黑树的数据结构和扩容等。

java.util.Map接口常用的实现类,HashMap,HashTable,LinkedHashMap,TreeMap

(扩展到这里就学习一下)

一下为继承实现关系图;

 

 (1)HashMap:hashMap是根据hashcode()方法存储数据,一般能直接快速定位到值,访问速度很快,但查询顺序不恒定。HashMap的键有且只能有一个为null,值可以多个为null。HashMap的线程不安全,可能会发生同意时刻有多个线程同时写hashmap,这样数据会出现错误。可以调用collections中的synchronizedMap方法使其线程安全(需验证),或者使用ConcurrentHashMap。

(2)HashTable:HashTable是一个遗留类,很多功能和hashmap类似,不同的是hashtable继承Dictionary,是线程安全的。任意时间只写一个hashtable,并发性不如concurrentHashMap,因为concurrentHashTable引用分段锁,在hashtable线程安全这方面可以被替代时候,新代码中就不建议使用,完全可以被hashmap和concurrenthashmap取代。

(3)linkedHashMap:LinkedHashMap继承hashmap,扩展了查询排序恒定功能,先插入的先查询。也可以带参构造;

(4)TreeMap:TreeMap实现SortedMap接口,能够把它保存的记录根据键排序,默认是按键值的升序排序,也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。如果使用排序的映射,建议使用TreeMap。在使用TreeMap时,key必须实现Comparable接口或者在构造TreeMap传入自定义的Comparator,否则会在运行时抛出java.lang.ClassCastException类型的异常。

猜你喜欢

转载自www.cnblogs.com/wangchenghao/p/13385218.html