【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年,真的是印象中过的最快的一年了,真的是时间过的飞快,还没反应过来年就夸完了,相信大家也已经开始上班了!俗话说新年新气象,马上就要到了一年之中最重要的金三银四,之前一直有粉丝要求 ...
随机推荐
- LR脚本示例之参数_变量介绍
Action(){ char *url = "127.0.0.1:1080"; char arr_url[1024]; //将url变量的值复制给p_url1参数 lr_save_ ...
- CentOS-语言设置
查看所有的locale语言 # locale -a # locale -a|grep en 查看当前操作系统使用的语言 # echo $LANG 设置系统locale语言为中文环境(永久生效) # v ...
- 2406: C语言习题 求n阶勒让德多项式
2406: C语言习题 求n阶勒让德多项式 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 961 Solved: 570[Submit][Status ...
- c++链表-双向链表+增删查改
基于双向链表的增删改查和排序(C++实现) 双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱.所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前 ...
- python 嵌套作用域 闭包函数
#闭包函数 def multiplier(factor): def multiplyByFactory(number): return number*factor return multiplyByF ...
- 接口的多态使用; 接口应用实例:U盘、打印机可以使用共同的USB接口,插入到电脑上实现各自的功能。
接口的多态使用 接口应用实例:U盘.打印机可以使用共同的USB接口,插入到电脑上实现各自的功能.
- 安装mysqlclient失败
环境:python3.6 sudo apt-get install python3.6-dev sudo apt-get install default-libmysqlclient-dev 参考:h ...
- 关于OnTimer()使用
OnTimer()其实是用来响应WM_TIMER消息的,其实OnTimer()就是一个回调函数,不过是系统默认的,当用户使用SetTimer()函数设定一个定时器的时候,只要是第三个参数为NULL,则 ...
- Docker 学习基本操作与守护式容器
Docker 学习基本操作与守护式容器 容器操作 运行容器 docker run --name指定名字 -istdin -ttty虚拟终端 在终端中用 exit 即可退出容器,并结束运行 查看容器 p ...
- Voyager下的Settings方法
设置网站标题,logo,描述: 自定义setting字段,添加group为文章,key为title的字段: 添加成功: 前端页面写法: <img src="{{ Voyager::im ...