集合中HashTable和HashMap和LinkedHashMap区别
1.继承不同
public class HashTable extends Dictionary implements Map
public class HashMap extends AbstractMap implements Map
2.hashtable是线程安全的,其方法是同步的,而hashmap中的方法在缺省情况下是非同步的,是线程不安全的。
3.HashTable是在JDK1.0就存在的类,基于哈希表实现,默认数组的大小为11,负载因子0.75,扩容方式是原数组长度2倍+1(oldlength*2+1),
HashMap基于哈希表实现,并在JDK1.8后加入了二叉树(红黑树),默认情况下,数组大小16,负载因子0.75,扩充方式为当前数组容量<<1(即乘2)
4.对于哈希值得使用不同,前者直接使用对象的hashcode值,而后者则是通过计算hashcode值之后,对数组长度(默认16)取余,来决定key对象存放在数组的哪个位置,JDK1.8后,当链表长度大于8时,链表转换为红黑树结构存储,目的是为了提高效率,加快查找速率。
5.LinkedHashMap就是hashmap的一个子类,因为hashmap并不能保证顺序恒久不变,所以LinkedHashMap使用了双向链表来维护元素的顺序
集合中ArrayList和Vector区别
1.同步性:vector是线程安全的,即它的方法间是线程同步的;而arraylist是线程不安全的,它的方法之间是非同步的,所以ArrayList适合单线程访问,效率较高,而vector适合多线程访问,效率较低
2.两者都是通过动态对象数组来实现的,两者都有一个初始的容量大小,当元素个数超过容量大小时,进行动态扩充,扩充原理为:ArrayList:(构造方法两个,分别为:public ArrayList(),public ArrayList(int initialCapacity))原数组大小的1.5倍;vector:(构造方法有三个分别为public Vector(int initialCapacity, int capacityIncrement),public Vector(int initialCapacity), public vector()),capacityIncrement是增量,当增量为0时,扩充原数组大小的2倍,当增量不为0时,扩充为原大小+增量;
3.两者均实现了List接口,都是有序的集合
集合中ArrayList和linkedList区别
ArrayList基于动态对象数组实现,而linkedlist基于双向链表结构实现,所以前者不便于插入和删除,而后者则适合插入和删除。随机访问时,ArrayList的get、set要比linkedList的get、set性能更好,因为后者需要移动指针
集合框架下Collection和Map接口下的ArrayLIst、vector、hashmap、HashTable、linkedList区别
最新推荐文章于 2024-07-15 22:27:18 发布