【java基础 17】集合中各实现类的性能分析
2017-02-21 11:16
302 查看
大致的再回顾一下java集合框架的基本情况
1.1,HashSet用于添加、查询
HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比TreeSet(SortedSet的子类)好,尤其是最常用的添加、查询等操作。原因:TreeSet需要额外的红黑树算法来维护集合元素的次序,只有当需要一个保持排序的Set时,才应用使用TreeSet
1.2,LinkedHashSet用于遍历
LinkedHashSet是HashSet的一个子类,对于添加、删除等操作,HashSet要略胜一筹,这是因为LinkedHashSet维护链表所带来的开销造成的,但也同样是因为有链表,遍历LinkedHashSet会更快
1.3,EnumSet性能最好(有限制)
EnumSet是所有Set实现类中性能最好的,但是它只能保存同一个枚举类的枚举值作为集合元素
备注:Set的三个实现类HashSet和TreeSet、EnumSet都是线程不安全的,如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,必须手动保证该Set集合的同步性。
2.1,大部分时候使用ArrayList
ArrayList和LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表。Queue代表队列,Deque代表双端队列(可作为队列,也可作为栈)
而对于LinkedList来说,它不仅提供了List的功能,还提供了双端队列的功能。但是,由于数组是以一块连续内存区来保存所有的数组元素,因此在随机访问时性能最好,而内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。总体来说,ArrayList的性能比LinkedList要好!
备注:遍历ArrayList、Vector,用get方法性能更好,遍历LinkedList,用Iterator更好。Vector是线程安全的,但是它同时也影响的效率,用Collections包装集合的性能更好!
Map和Set差不多,TreeMap(红黑树管理key-value,保证有序)、HashMap、Hashtable(线程安全),所以对于一般的场景,多用HashMap!
一、各Set实现类的性能分析
1.1,HashSet用于添加、查询HashSet和TreeSet是Set的两个典型实现,HashSet的性能总是比TreeSet(SortedSet的子类)好,尤其是最常用的添加、查询等操作。原因:TreeSet需要额外的红黑树算法来维护集合元素的次序,只有当需要一个保持排序的Set时,才应用使用TreeSet
1.2,LinkedHashSet用于遍历
LinkedHashSet是HashSet的一个子类,对于添加、删除等操作,HashSet要略胜一筹,这是因为LinkedHashSet维护链表所带来的开销造成的,但也同样是因为有链表,遍历LinkedHashSet会更快
1.3,EnumSet性能最好(有限制)
EnumSet是所有Set实现类中性能最好的,但是它只能保存同一个枚举类的枚举值作为集合元素
备注:Set的三个实现类HashSet和TreeSet、EnumSet都是线程不安全的,如果有多个线程同时访问一个Set集合,并且有超过一个线程修改了该Set集合,必须手动保证该Set集合的同步性。
二、各线性表的性能分析
2.1,大部分时候使用ArrayListArrayList和LinkedList是线性表的两种典型实现:基于数组的线性表和基于链的线性表。Queue代表队列,Deque代表双端队列(可作为队列,也可作为栈)
而对于LinkedList来说,它不仅提供了List的功能,还提供了双端队列的功能。但是,由于数组是以一块连续内存区来保存所有的数组元素,因此在随机访问时性能最好,而内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。总体来说,ArrayList的性能比LinkedList要好!
备注:遍历ArrayList、Vector,用get方法性能更好,遍历LinkedList,用Iterator更好。Vector是线程安全的,但是它同时也影响的效率,用Collections包装集合的性能更好!
三、总结
Map和Set差不多,TreeMap(红黑树管理key-value,保证有序)、HashMap、Hashtable(线程安全),所以对于一般的场景,多用HashMap!
相关文章推荐
- 【java基础 17】集合中各实现类的性能分析
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
- Java遍历集合方法分析(实现原理、算法性能、适用场合)
- [疯狂Java]集合:Deque(双端队列)以及两个实现(ArrayDeque、LinkedList)、Stack(摒弃)、各线性表性能分析
- Java遍历集合的几种方法分析(实现原理、算法性能、适用场合)
- Java遍历集合方法分析(实现原理、算法性能、适用场合)
- Java基础---基础加强---增强for循环、自动拆装箱及享元、枚举的作用、实现带有构造方法、透彻分析反射的基础_Class类、成员变量的反射、数组参数的成员方法进行反射、数组的反射应用
- 黑马程序员_Java基础_集合框架(四)_17
- Java并发基础框架AbstractQueuedSynchronizer初探(ReentrantLock的实现分析)
- Java集合源码学习(13)_Queue接口以及基础实现AbstractQueue
- 【Java基础之集合(三)】集合对象比较大小和比较重复的区别和不同实现
- java 集合框架之LinkedList及ListIterator实现源码分析
- java中List集合的遍历和两种实现类的比较分析
- 【Java基础之集合(一)】各种常用集合(Array、ArrayList、HashSet、HashMap、TreeMap等)分析对比
- 快速排序的JAVA实现和性能分析
- [Java基础要义] HashMap的设计原理和实现分析
- Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)
- Java中Set集合的遍历及实现类比较分析
- Java集合源码学习(17)_BlockingQueue接口的实现LinkedBlockingQueue