【java基础 17】集合中各实现类的性能分析
大致的再回顾一下java集合框架的基本情况
一、各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,大部分时候使用ArrayList
ArrayList和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基础之集合框架--使用ArrayList类动态 存储数据
		一.ArrayList是List接口下的一个实现类,实现了长度可变的.连续的数组:拥有数组的特性. 遵循了LIst的规则:不唯一的.有序的. 如果没有增加泛型的话,集合中可以添加任何类型的数据. 使用 ... 
- Java : java基础(2) 集合&正则&异常&File类
		Obj 方法: hashCode() 返回内存地址值, getClass() 返回的时运行时类, getName() 返回类名, toString() 把名字和hashCode() 合在一起返回,如果 ... 
- Java集合中的LinkedHashMap类
		jdk1.8.0_144 本文阅读最好先了解HashMap底层,可前往<Java集合中的HashMap类>. LinkedHashMap由于它的插入有序特性,也是一种比较常用的Map集合. ... 
- Java基础复习笔记系列 五 常用类
		Java基础复习笔记系列之 常用类 1.String类介绍. 首先看类所属的包:java.lang.String类. 再看它的构造方法: 2. String s1 = “hello”: String ... 
- Java基础-进程与线程之Thread类详解
		Java基础-进程与线程之Thread类详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.进程与线程的区别 简而言之:一个程序运行后至少有一个进程,一个进程中可以包含多个线程 ... 
- java基础-Map集合
		java基础-Map集合 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Map集合概述 我们通过查看Map接口描述,发现Map接口下的集合与Collection接口下的集合,它 ... 
- 第6节:Java基础 - 三大集合(上)
		第6节:Java基础 - 三大集合(上) 本小节是Java基础篇章的第四小节,主要介绍Java中的常用集合知识点,涉及到的内容包括Java中的三大集合的引出,以及HashMap,Hashtable和C ... 
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
		Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ... 
- 备战金三银四!一线互联网公司java岗面试题整理:Java基础+多线程+集合+JVM合集!
		前言 回首来看2020年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ... 
随机推荐
- db2数据库备份
			一.离线备份 db2 list database directory -----查看有哪些数据库,确定需要备份哪个数据库 db2 disconnect current -----断开以数据库 ... 
- 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest J Computer Network1 (缩点+最远点对)
			题意:在连通图中,求一条边使得加入这条边以后的消除的桥尽量多. 在同一个边双连通分量内加边肯定不会消除桥的, 求边双连通分量以后缩点,把桥当成边,实际上是要选一条最长的链. 缩点以后会形成一颗树,一定 ... 
- UVA 11853 - Paintball 战场(dfs)
			题意:有n个敌人,每个敌人有一个攻击范围,问你是否存在从西边到东边的路径,如果存在,输出入点和出点最靠北的坐标. 把每个敌人看出一个圆,从上往下跑dfs连通,如果到达底部,那么无解.要求出最靠北的坐标 ... 
- HDU 5095 Linearization of the kernel functions in SVM (坑水)
			比较坑的水题,首项前面的符号,-1,+1,只有数字项的时候要输出0. 感受一下这些数据 160 0 0 0 0 0 0 0 0 -10 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 0 ... 
- acid (数据库事务正确执行的四个基本要素的缩写)
			ACID,指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability).一个支持事务(T ... 
- nodejs个人博客系统
			说明:本人目前还是一名C#程程序,在公司干过一年的前端(ps切图,html+css,js),二年的后台C#(b/s,c/s)的开发.因为想转型所以学习了nodejs这门感觉非常棒的一门语言.于是写了一 ... 
- Object类 任何类都是object类的子类 用object对象接收数组 object类的向上向下转型
			任何类都是object类的子类 用object对象接收数组 object类的向上向下转型 
- python特殊字符转义符号表示
- Bzoj 1131[POI2008]STA-Station (树形DP)
			Bzoj 1131[POI2008]STA-Station (树形DP) 状态: 设\(f[i]\)为以\(i\)为根的深度之和,然后考虑从他父亲转移. 发现儿子的深度及其自己的深度\(-1\) 其余 ... 
- Redis错误解决:(error) MISCONF Redis is configured to save RDB snapshots
			刚开始学习使用redis数据库,在执行删除命令时,提示了我这么一个错误: 错误提示 (error) MISCONF Redis is configured to save RDB snapshots, ... 
