HashMap、HashTable、TreeMap和WeakHashMap

来源:互联网 发布:玉兔飞控软件下载 编辑:程序博客网 时间:2024/05/19 13:18

java.util.Map接口是Java为数据结构定义的映射,包含3个实现类:HashMap、HashTable和TreeMap。


Map是用来存储“键-值”对的数据结构,通过对象进行索引,用来索引的对对象叫key,其对应的对象叫value。


HashMap是最常用的,根据键的HashCode值存储数据,根据键可以直接获取它的值,访问速度快。HashTable也采用hash法进行索引。

HashMap与HashTable的区别:

       1)HashMap是HashTable的轻量级实现,非线程安全,都完成了Map接口。HashMap允许空(null)键值(key),但是只允许一条记录的键为null;而HashTable不允许。

       2)HashMap把HashTable的contains方法去掉了,改成containsValue和containsKey。

       3)HashTable是线程安全的,而HashMap不是线程安全的。HashMap效率高于HashTable。

       4)HashTable使用Enumeration,HashMap使用Iterator。

       5)采用的hash/rehash算法类似。

       6)HashTable中hash数组默认大小为11,增加方式是2*old+1;HashMap中hash数组大小默认16,而且是2的指数。

       7)hash值的使用不同,HashTable直接使用对象的HashCode。

WeakHashMap与HashMap类似,WeakHashMap中的key采用“弱引用”,只要其中的key不在被外部引用,就可以被垃圾回收器回收。HashMap中的key采用“强引用”,只有从HashM中删除,才可以被回收。


Map中插入、删除和定位元素,用HashMap;

需要按自然顺序或者自定义的顺序遍历键,用TreeMap(TreeMap实现了SortMap接口);

输出与输入的顺序相同,或者按读取顺序排列,使用LinkedHashMap(是HashMap的子类)。


冲突的产生:当一个元素被插入式与一个已经插入的元素散列到相同的值,就会产生一个冲突。

冲突处理的方法:开放地址法,再hash法、链地址法等。

0 0
原创粉丝点击