各种Set/List集合类的性能总结

来源:互联网 发布:先知者软件官网 编辑:程序博客网 时间:2024/05/17 21:47
  • 各Set实现类的性能分析
HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比TreeSet好(特别是最常用的添加、查询等操作),因为TreeSet需要额外的红黑树算法来维护集合元素的次序。只有当需要一个保持排序的Set时,才应该使用TreeSet,否则都应该使用HashSet.
HashSet还有一个子类:LinkedHashSet,对于普通的插入、删除操作,LinkedHashSet比HashSet要略微慢一点,这是由于维护链表所带来的额外开销造成的,但由于有了链表,遍历LinkedListSet会更快。
EnumSet是所有Set中性能最好的一个,但它只能保存同一个枚举类的枚举值作为集合元素。
Set的三个实现类都是线程不安全的。如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,则必须手动保证该Set集合的同步性。通常可以通过Collections工具类的synchronizedSortedSet方法来“包装”该Set集合类。
  • 各种线性表的性能分析
Java提供的List就是一个线性表接口,二ArrayList、LinkedList又是线性表的两种实现:基于数组的线性表和基于链的线性表。Queue代表了队列,Deque代表了双端队列(既可以作为队列使用,也可以作为栈使用)。
如果需要遍历List集合元素,对于ArrayLish集合,应该使用随机访问的方法(get)来遍历集合元素,这样性能更好;对于LinkedList集合,则应该采用迭代器(Iterator)来遍历集合元素。
如果需要经常执行插入、删除操作来改变包含大量数据的List集合大小,可以考虑使用LinkedList集合。使用ArrayList集合可能需要经常重新分配内部数组的大小,效果可能较差。
如果有多个线程需要同时访问List集合中的元素,开发者可考虑使用Collections将集合包装成线程安全的集合。
阅读全文
0 0