几种集合的异同

ArrayList
默认初始容量0,加1个元素扩容到10 加载因子1 扩容1.5倍
底层数据结构是数组结构
线程不安全,效率高
若有设置的初始容量使用设置的初始容量。

Vector
默认初始容量10 加载因子1 扩容2倍
底层数据结构是数组结构
线程安全,效率低
若有设置的初始容量使用设置的初始容量。


HashSet
初始容量是16(2的n次方) 加载因子0.75 扩容2倍
底层实现是一个HashMap(保存数据),实现Set接口
若有设置初始容量,则使用大于此初始容量的2的幂。

TreeSet
底层结构是TreeMap (红黑树–2叉树中的一种)
TreeSet线程不安全,性能不如HashSet
但是有序(String自然顺序,不是插入顺序),不可重复
插入元素如果为非基本类型则需要可比性(Comparable)


HashMap
默认初始容量是16(2的n次方) 加载因子0.75 扩容2倍
若有设置初始容量,则使用大于此初始容量的最小2的幂。
线程不安全,效率高
支持key跟value为null

(1.8)底层结构是 :数组+链表+红黑树

  • hash冲突(hash碰撞):不同的关键码 经过hash算法以后得到了相同值。
  • 首先把Key经过hashcode和hash得到一个整数值。
  • 将这个整数值跟数组table的长度取余数。这个余数就是存的数组的索引。
  • 如果2个Key得到的索引相同(有2个元素存在同一个桶里面),先通过equals进行判断,如果为true表示是相同(逻辑上)的对象,那么就进行覆盖。如果equals返回时的false,表示是不同的元素,只是发生了hash冲突,那么就以链表的形式接在后面。
  • 当一个链表的长度达到了8,并且数组的长度达到了64,会把链表结构转成红黑树。如果没有达到64则把数组扩容。
  • 当一个红黑树元素当减少到6个时候结构再转换成链表。

HashTable
默认初始容量为11,加载因子为0.75 扩容2倍+1
线程安全,效率低
若有设置初始容量,则使用此值。
不支持key跟value为null

TreeMap
底层结构是红黑树(2叉树中的一种)
TreeMap线程不安全, 有序(String自然顺序(定制顺序),不是插入顺序)
插入元素如果为非基本类型则需要可比性(Comparable)
key不能为null,值可以为null


LinkedList 链表

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值