java基本集合类

1.arrayList:
  a.初始容量:10
  b.扩容:*1.5+1
  c.删除时并不减少容量,可调用 TrimToSize()压缩
  d.非线程安全
2.LinkedList
  a.基于双向链表实现
  b.非线程安全
3.vector
  a.基于synchronized的ArrayList
  b.通过传入的capacityIncrement扩容,若capacityIncrement>0,则数组length+capacityIncrement
    若capacityIncrement<=0,则 length*2
  c.线程安全
4.stack
  a.stack基于vector实现
  b.线程安全
5.HashSet
  a.基于HashMap实现
  b.非线程安全
6.TreeSet
  a.基于TreeMap实现,支持排序
  b.非线程安全
7.HashMap
  a.loadFactor=0.75,thrshold=12,capacity=16
  b.扩容:若当前元素个数>thrshold,把capacity扩大一倍,对元素重新hash,填入数组,从设thrshold
  c.非线程安全
  d.对于冲突元素采用链表解决
8.TreeMap
  a.基于红黑树的实现,支持排序
 
9.性能测试:
  a.当数量较小时(10):
    1).增加:ArrayList性能稍差,但基本一致
    2).查询:ArrayList、LinkedList、Vector、Stack性能较差(需遍历整个数组),Set、Map较快
    3).删除:TreeMap与TreeSet表现较差(删除后需排序),其他基本一致
  b.当数量较大时(100):
    1).增加:ArrayList性能与10比稍差一点点,TreeMap与TreeSet下降明显
    2).查询:与10比,性能基本没太大变化
    3).删除:除TreeMap与TreeSet,其他和10比,没有太大变化
  c.当数量较大时(1000):
    1).增加:与100比,稍有上升,但基本变化不大
    2).查询:ArrayList、LinkedList、Vector、Stack大幅度下降,Set、Map基本没有变化
    3).删除:性能与查找变化基本一致
  综合:对于查找与删除较为频繁,且数据量较大时,采用Set与Map更合适
        对于其他场景,可根据实现综合考虑
  对于多线程场景:各集合类较单线程相比下降明显,当元素数量为1000时,性能因素取决于线程数,线程数越多,性能下降越明显
                  Set与Map的实现变现的更出色,随着元素与线程数增加,LinkedList表现的更差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值