zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Java 集合

2023-09-11 14:22:56 时间

集合

1️⃣集合的概念

集合在java.util包路径下,在该包路径下提供了很多的接口以及实现类。
集合类型主要包括3种:set(集)、list(列表) 和map(映射)。
集合中存放的都是对象的引用,而不是对象的本身。

2️⃣Java集合框架图

在这里插入图片描述
注意: 虚线对应的是接口,实现对应的是实现类。
基于集合框架图可知:顶层的接口 CollocationMap
Collocation接口表示存储的是单个数据组成的集合。
Map接口表示存储的是key-value的键值对的集合。

3️⃣相关接口介绍

Collection接口:主要有三个接口
List接口: 允许存储重复的元素的集合
Set接口: 不允许存储重复的元素的集合,可以达到去重的目的
Queue接口: 可以重复。主要用来存储数据,模拟队列(先进先出)、模拟栈(先进后出)、优先级队列

Map接口
存储的数据是以键值对形式存储
SortMap接口: 对于元素进行排序

4️⃣实现类特点

List接口的实现类

ArrayList查询速度快,线程不安全,底层基于数组来存储元素,封装一个动态的Object[]数组,是一种顺序存储的集合(元素存储是按照插入顺序有序)
LinkedList增删速度快,线程不安全,底层是一个双向链表实现,元素也是插入有序
Vector线程安全,查询增删速度慢,已经被ArrayList替代

Set接口的实现类

HashSet底层数据结构是基于HashMap实现的,不按照集合中元素的顺序,即不能保证数据和插入的顺序一致,线程不安全
LinkedHashSet底层是基于LinkedHashMap实现的,线程不安全,能保证数据的顺序和插入顺序一致
TreeSet底层基于TreeMap集合实现,线程不安全,数据有序的(按照属性的特征排序)

👀小插曲:ArrayListTreeSet存储的数据都是有序的,那么两者有什么区别呢?ArrayList存储的数据是按照插入顺序有序的,而TreeSet存储的数据是按照数据的属性特征排序的,举一个栗子🌰,两者都有序插入数据2、3、2,那么在ArrayList中的顺序就是2、3、2,在TreeSet中顺序就是2、2、3

Map接口的实现类

HashMap底层是一个哈希表结构,线程不安全的,允许key-value为null,key不能重复(哈希表结构相关),数据是无序的
HashtableHashMap类似,底层是哈希表接口,线程是安全的,key-value不能为null
LinkedHashMapHashMap的子类 。可以保证数据是插入有序的
TreeMap底层是二叉树:红黑树;线程不安全的,数据可以基于元素特征排序。