Java 基础 - 集合
Set 集合
Set 集合通常不能记住元素的添加顺序。Set 集合不允许包含相同的元素。
- HashSet 是 Set 接口的实现类,按照 Hash 算法存储集合中的元素。HashSet 不是同步的,如果多个线程同时访问一个 HashSet,则必须通过代码来保证其同步。集合元素值可以是 null。
- LinkedHashSet 是一个 HashSet 的子类,也是根据元素的 hashcode 值来决定元素的存储位置,但它同时使用链表维护元素的次序,这样使得看起来是以插入顺序保存的。因为需要维护元素的插入顺序,因此性能略低于 HashSet 的性能。
- TreeSet 是 SortedSet 接口的实现类,正如 SortedSet 名字所暗示的,TreeSet 可以确保集合元素处于排序状态。TreeSet 采用「红黑树」的数据结构来存储集合元素。TreeSet 支持两种排序方法:自然排序和定制排序。如果试图将一个对象添加到 TreeSet 时,该对象的类必须实现 Comparable 接口,否则,程序将会抛出
ClassCastException异常。TreeSet 只能添加同一种类型的对象。 - EnumSet 是专门为枚举类设计的集合类,EnumSet 的集合元素也是有序的,以枚举值在 Enum 类内的定义顺序决定集合元素的顺序。EnumSet 集合不允许加入 null 元素。
Set 实现类的性能分析
HashSet 和 TreeSet 是 Set 中两个典型的实现,HashSet 性能总是比 TreeSet 好,因为 TreeSet 需要额外的红黑树算法维护集合元素的次序。但需要保持排序的 Set 时,才应该使用 TreeSet,否则都应该使用 HashSet。
HashSet 还有一个子类:LinkedHashSet。对于普通的插入、删除操作,LinkedHashSet 比 HashSet 要略微慢一点,这是由于维护链表所带来的开销造成的。但是由于有了链表,遍历 LinkedHashSet 会更快。
EnumSet 是所有 Set 实现类中性能最好的。
需要注意的是: Set 的三个实现类 HashSet TreeSet EnumSet 都是线程不安全的。通常可以通过 Collections 工具类的 synchronizedSortedSet 方法来包装 Set 集合。此操作最好在创建时进行,防止对 Set 集合意外的非同步访问。
List 集合
List 集合代表一个元素有序、可重复的集合。索引从0开始。
- void add(int index, Object element) 将元素插入到 List 集合的 index 处
- boolean addAll(int index, Collection c) 将集合 c 所包含的元素插入到 List 集合的 index 处
- Object get(int index) 返回集合 index 索引处的元素
- int indexOf(Object o) 返回对象 o 在 List 集合中第一次出现的位置索引
- int lastIndexOf(Object o) 返回对象 o 在 List 集合最后一次出现的位置索引
- Object remove(int index) 删除并返回 index 索引处的元素
- Object set(int index, Object element) 将 index 索引处的元素替换为 element 对象,返回被替换的旧元素。这里的 index 不能超出已有的索引长度
- LIst subList(int fromIndex, int toIndex) 返回从索引 fromIndex (包含) 到索引 toIndex (不包含)处所有的集合元素组成的子集合。果然,超出了索引,就会报错
java.lang.IndexOutOfBoundsException - void replaceAll(UnaryOperator operator) 根据 operator 指定的计算规则重新设置 List 集合的所有元素
- void sort(Comparaotr c) 根据 Comparator 参数对 List 集合的元素排序
各种线性表的性能分析
List 就是一个线性表的接口,而 ArrayList、LinkedList 又是线性表的两种典型:基于数组的线性表和基于链的线性表。Queue 代表了队列,Deque 代表了双端队列(既可以作为队列使用,也可以作为栈使用)。
LinkedList 集合不仅提供了 List 的功能,还提供了双端队列、栈的功能。
数组以一块连续内存保存所有的数组元素,所以数组在随机访问时性能最好;内部以链表作为底层实现的集合在执行插入、删除操作时有较好的性能。总体来讲,ArrayList 性能要比 LinkedList 的性能要好,因此,大部分时候使用都应该考虑使用 ArrayList。
Map 集合
Java 基础 - 集合的更多相关文章
- JAVA基础-集合(二)
一.Map整体结构体系 Map是集合的另一大派系,与Collection派系不同的是Map集合是以键值对儿的形式存储在集合的.两个键为映射关系,其中第一个键为主键(主键是唯一的不可重复),第二个键为v ...
- Java基础-集合的嵌套
Java基础-集合的嵌套 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.静态导入 静态导入是在JDK1.5后的新特性,可以减少开发的代码量,但是实际用处是很一般,静态导入的标准 ...
- Java基础——集合框架
Java的集合框架是Java中很重要的一环,Java平台提供了一个全新的集合框架.“集合框架”主要由一组用来操作对象的接口组成.不同接口描述一组不同数据类型.Java平台的完整集合框架如下图所示: 上 ...
- java基础---集合(1)
一. 基本概念 集合.数组都是对多个数据进行存储操作的结构,简称Java容器 数组:长度确定,类型确定,对于添加.删除.插入等操作效率不高,元素有序可重复 Java中集合框架顶层框架是:java.ut ...
- Java基础——集合源码解析 List List 接口
今天我们来学习集合的第一大体系 List. List 是一个接口,定义了一组元素是有序的.可重复的集合. List 继承自 Collection,较之 Collection,List 还添加了以下操作 ...
- Java基础—集合
一.概述 Java中的集合框架主要分为两大派别:Collection 和 Map —— 位于util包下 类的基础关系图如下(图片来自百度) 常用: List——有序可重复 Set——无序不可重复 M ...
- java基础集合简介Set(三)中
今天主要说夏set集合,每天抽出一个小时总结下,生活会更加美好! --< java.util >-- Set接口: 数据结构:数据的存储方式: Set接口中的方法和Collection中方 ...
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- 十七、Java基础---------集合框架之Map
前两篇文章中介绍了Collection框架,今天来介绍一下Map集合,并用综合事例来演示. Map<K,V> Map<K,V>:Map存储的是键值对形式的元素,它的每一个元素, ...
- 十六、Java基础---------集合框架之Set
写在前面的话,这篇文章在昨天就写好了,今天打开的时候一不小心将第二天的文章粘贴到了这篇文章,很不幸的是除了标题之外依然面目全非,今天带着沉痛的心情再来写这篇文章! 上篇文章介绍了Collection体 ...
随机推荐
- Ubuntu16.04 本地提权漏洞复测过程
一.漏洞概述 Ubuntu 16.04 版本且unprivileged_bpf_disable 权限没有关闭的情况下就会存在 提权漏洞查看方式:1,cat /proc/version 查看系统版本 2 ...
- 教你如何用笔记本设置超快WIFI
以win7为例 1.在主菜单运行框输入 cmd------->以管理员的身份运行 2.命令提示符中输入:netsh wlan set hostednetwork mode=allow ssid ...
- swiper嵌套小demo(移动端触摸滑动插件)
swiper(移动端触摸滑动插件) tip:自己敲得Swiper 的小demo,可以复制粘贴看看效果哦. swiper的js包css包下链接地址 : https://github.com/Clear ...
- oracle索引分类
参考文档:https://wenku.baidu.com/view/d4d6ee1ba76e58fafab00336.html https://blog.csdn.net/u010719917/art ...
- SQL中什么时候需要使用游标?使用游标的步骤
https://zhidao.baidu.com/question/568932670.html 例子table1结构如下id intname varchar(50) declare @id intd ...
- c++求最小公倍数和最小公约数
方法一:辗转相除法(欧几里得 Euclidean) 用“较大数”除以“较小数”,再用较小数除以第一余数,再用第一余数除以第二余数: 反复直到余数为零为止. #include<iostream&g ...
- RGBA与Opacity
rgba(r,g,b,a) 都与透明度有关,rgba不会影响文字,opacity则会.
- Centos7.1环境下搭建SVN
环境准备: 系统 配置 IP Centos7.1 1核2G+60GB硬盘 10.10.28.204 1.安装 sudo yum install subversion 查看版本 svnserve –-v ...
- MongoDB "$" 字符 下标位置
我们可以修改列表里面元素的名字 例如: 修改age=34的数据,hobby里面的"足球"改为"网球" }) { "_id" : Object ...
- [js]函数的上级作用域,他的上级作用域就是谁,跟函数在哪执行的没什么关系.
函数的上级作用域,他的上级作用域就是谁,跟函数在哪执行的没什么关系. <script> //如何查找上级作用域? //看函数在哪个作用域下定义的,他的上级作用域就是谁. 跟函数在哪执行的没 ...