ArrayList与Vector都有一个初始化容量大小,当里面的元素的大小超过默认值的时候,会进行自动扩容,而Vector默认是扩充为原来的两倍,ArrayList是默认扩容为原来的1.5倍。
没有ArrayList是线程同步的,而Vector是间接或者直接线程同步的。所以Vector是线程安全的。由于Vector提供了线程安全机制所以其性能略低于ArrayList.
LinkList,也是非线程安全容器,其查找效率低,但是其插入效率高。
顺序表适合在随机场合访问,访问时间为o(1),而列表的随机访问时间为o(n)。
Map()是一种简直对存储的数据结构,数组是以下标来作为其内容的索引。map则是以对象来作为内容对象的索引。,用来做索引的对象叫做key,用来做内容的对象叫做value
HashMap与Hashtable
HashMap是Hashtable的轻量级实现(非线程安全),他们都完成了Map接口,主要区别是,HashMap允许空的键值,而Hashtable不允许。
Hashtable是线程安全的。多个线程访问Hashtable时不需要开发人员对其进行同步,但是就效率而言,HashMap可能高于Hashtable.
Hashtable使用enumeriation,而HashMap使用Iterator.
由于他们两个的Hash、rehash使用的算法都几乎是一样的,所以在性能上不会有太大的差异。
Hashtable中默认大小是11,增加方式是*2+1.而在HashMap中,HashMap的默认大小是16,而且一定是2的倍数。
hash值的使用不同,Hashtable直接使用对象的hashCode.LinkHashMap时HashMap的子类,如果要输出顺序和输入顺序相同用它。
WeakHashMap与HashMap类似,二者不同之处在于WeakHashMap中的key是“弱类型的引用方式”只要其中的key不被外部引用,就会被垃圾回收器回收。而HashMap则是强类型引用。只有这个key被删除的时候才会被垃圾回收器回收。
HashMap同步:Map m = Collection.synchronizedMap(new HashMap)来达到同步效果。具体而言该方法返回了一个同步的Map,该Map封装了底层的HashMap的所有方法,使得底层的HashMap即使在多线程环境下也是安全的。
keySet(),entrySet(),的区别
keySet()存放的是key,entrySet()存放的是键和值