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表现的更差。

猜你喜欢

转载自hegan-2009.iteye.com/blog/1315196
今日推荐