集合框架下Collection和Map接口下的ArrayLIst、vector、hashmap、HashTable、linkedList区别

集合中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性能更好,因为后者需要移动指针

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值