集合包在单线程和多线程下的性能总结

集合工具类比较包含:ArrayList,LinkedList,Vector,Stack,HashSet,TreeSet,HashMap,TreeMap。

单线程下:
    增加元素:ArrayList性能相对较差,需要扩容(复制数组影响效率Vector也如此),随着元素数量的增加,TreeMap和TreeSet的性能下降比较明显,其他几个变化不是很明显。

    查找元素:几个List,Vector,Stack性能相对差一些(由于查找需要遍历整个集合),而且随着元素数量的增加,下降非常明显,而Set、Map都是通过hash后再到链表上查找,因此速度会更快些,效率基本变化不大。
   
    删除元素:TreeSet和TreeMap性能较差(原因是删除时需要排序),随着元素数量的增加,几个List实现类性能下降非常明显(和查找一样要遍历整个集合)。

    总结:单线程下,当元素数量增加后,增加元素除了ArrayList、Vector扩容影响较大,其他基本无变化。在查找、删除元素上,几个List的实现性能下降较为严重,Set,Map的实现则基本不会受元素数量的影响。对于查找和删除较为频繁,且元素数量较多的应用,Set,Map是更好的选择。

多线程下:
   
    相同元素数不同线程数:各集合类的性能下降非常明显,并且随着线程数的增加,下降的就越多。相对而言,Set和Map的实现表现较好一些,linkedList表现稍差。
   

猜你喜欢

转载自sedumli.iteye.com/blog/1114974