HashMap,Hashtable,TreeMap,WeakHashMap有什么区别?
HashMap是最常用的Map,根据HashCode值存储数据,根据键可以很快获取值,访问速度很快
Hashtable与HashMap:
由于HashMap与Hashtable都采用了hash法进行索引,两者具有许多相似之处,主要的区别如下
- HashMap是Hashtable的轻量级实现(非线程安全的实现),主要区别是HashMap允许空(null)键值(key)【最多只允许一条记录的键为null,不允许多条记录的值为null】;而Hashtable不允许
- HashMap把Hashtable的contains方法去掉了,改成了containsKey和containsvalue;Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map接口的实现
- Hashtable的方法是线程安全的,而HashMap不支持线程的同步,不是线程安全的。在多个线程访问Hashtable时,不需要进行同步,对于HashMap,必须提供额外的同步机制,所以就效率来说HashMap可能高于Hashtable
- HashMap使用Iterator;Hashtable使用Enumeration
- Hashtable中,hash数组默认大小是11,增加方式是old * 2+1;HashMap中hash数组默认大小是16,而且一定是2的指数
TreeMap与HashMap:
HashMap存入的键值对在取出时没有固定的顺序,是随机的
TreeMap实现了SortMap接口,能够将保存的记录根据键排序,如果需要按照自然顺序或自定义顺序遍历键,用TreeMap更好
WeakHashMap与HashMap:
WeakHashMap中key采用“弱引用”的方法,只要key不被外部引用,它就可以被垃圾回收器回收
HashMap中的key采用“强引用”的方式,当它的key没有被外部引用时,只有在这个key从HashMap中删除后,才可以被垃圾回收器回收
如何实现HashMap的同步?
通过 Map m =Collections.synchronizedMap(new HashMap()) 来达到同步的效果
该方法返回一个同步的Map,该Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的
Collection和Collections有什么区别?
Collectiion是一个集合接口,提供了对集合对象进行基本操作的通用接口方法,实现该接口的类主要有List和Set
Collections是针对集合类的一个包装类,提供一系列静态方法以实现对各种集合的搜索,排序,线程安全化等操作,Collections类不能实例化,如果一个工具类。若在使用Collections类的方法时,对应的collectiion对象为null,这些方法都会抛出NullPointerException