java.util包下的集合框架

目录

概述

一、Collection接口

1. List接口

1.1 ArrayList类

1.2 LinckedList类

1.3 Vector类

1.4 Stack类

1.5 CopyOnWriteArrayList类

2. Set接口

2.1 HashSet类

2.2 LinckedHashSet类

2.3 TreeSet类

2.4 CopyOnWriteArraySet类

3. Queue接口

二、Map接口

1. HashMap类

2. LinckedHashMap类

3. TreeMap类

4. Hashtable类

5. ConcurrentHashMap类

三、Collections类


概述

集合是一个放数据容器,它主要包括Collection接口类集合和Map接口类集合。

(1)集合只能存放对象,Java中每一种基本数据类型都有对应的引用类型。例如在集合中存储一个int型数据时,要先自动转换成Integer类后再存入;

(2)集合存放的是对对象的引用,对象本身还是存放在堆内存中;

(3)集合可以存放不同类型、不限数量的数据类型。

一、Collection接口

单列集合,集合中仅保存值。

1. List接口

特点:有序,允许值重复。

非线程安全类:ArrayList类、LinkedList类;

线程安全类:Vector类、Stack类、CopyOnWriteArrayList类。

1.1 ArrayList类

1.1.1 数据结构

ArrayList基于Object[ ]数组实现 ==> Object[ ] elementData

1.1.2 扩容方式

(1)初始化

public ArrayList():无参构造方法,将内部数组初始化为长度为0的空数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA;

public ArrayList(int initialCapacity):有参构造方法,按照指定容量initialCapacity进行数组初始化。

(2)扩容

1)如果数组默认为空数组,当第1次添加元素时,数组容量扩容为10;

2)如果当数组容量不足时,按照原容量的1.5倍进行扩容增长;

3)数组的最大容量在Integer.MAX_VALUE-8至Integer.MAX_VALUE之间,如果超出,则抛出OutOfMemoryError错误。 

1.1.3 适用场景

ArrayList 适合数据连续性遍历,读多写少的场景。

1.1.4 常用方法

1.2 LinckedList类

1.2.1 数据结构

LinkedList是基于双向链表实现,链表中的每个节点都是一个Node类型的对象,Node对象由item、prev、next三部分组成。

1.2.2 扩容方式

由于采用链表结构,每次添加元素,都会创建新的Node节点并分配空间,所以不存在扩容。

1.2.3 适用场景

适合数据频繁添加删除操作,写多读少的场景。

1.2.4 常用方法

1.3 Vector类

线程安全:通过synchronized同步锁实现;性能较差;扩容方式:自定义扩容或扩容2倍。

1.4 Stack类

基于FILO先进后出实现的栈;继承自Vector类,所以也是线程安全的集合。

1.5 CopyOnWriteArrayList类

数据结构:基于数组Object[ ]实现;

线程安全:通过ReentrantLock实现COW读写分离思想,允许多个线程并发读取,但只能有一个线程写入。

2. Set接口

特点:无序,值唯一。

非线程安全类:HashSet类、LinkedHashSet类、TreeSet类;

线程安全类:CopyOnWriteArraySet类。

2.1 HashSet类

特点:无序;

数据结构:创建HashSet时,其构造方法创建维护了一个HashMap来进行存储,元素值保存在HashMap的key位置;

常用方法:

2.2 LinckedHashSet类

特点:有序;

数据结构:创建LinkedHashSet时,其构造方法调用父类构造方法,在内部创建维护了一个LinkedHashMap,用于维持元素的有序性。

2.3 TreeSet类

特点:排序;

数据结构:创建TreeSet时,其构造方法创建了一个TreeMap,用于保存元素。由于TreeMap可以自动排序,所以TreeSet中的元素也按照排序特点保存。

2.4 CopyOnWriteArraySet类

数据结构:CopyOnWriteArrayList<E> al ==> Object[ ];

线程安全:通过ReentrantLock实现COW读写分离思想,允许多个线程并发读取,但只能有一个线程写入。

3. Queue接口

特点:FIFO先进先出。

3.1 实现类

有界队列:ArrayBlockingQueue类,阻塞队列;

无界队列:LinkedBlockingQueue类,阻塞队列;

优先队列:PriorityQueue,基于小顶堆或大顶堆的实现优先队列,确保队头元素(根元素)是目前集合元素中的最小或最大元素。

3.2 子接口

子接口 ==> Deque接口

特点:双端队列,队头和队尾都能进行入队和出队操作;

实现类:LinkedList类。

3.3 常见方法

二、Map接口

关键特点:键值对集合,集合中按Key-Value键值对方式存储。

非线程安全类:HsahMap类、LinckedHashMap类、TreeMap类;

线程安全类:HashTabel类、ConcurrentHashMap类。

1. HashMap类

1.1 特点

无序、key唯一、value允许重复、key和value允许为null。

1.2 数据结构

 1.3 扩容方式

1.4 常用方法

2. LinckedHashMap类

关键特点:键值对按照有序方式存储;

数据结构:在HashMap的基础上,多维护了一条双向链表,用于存储顺序。 

3. TreeMap类

关键特点:按照key排序后存储;

数据结构:使用红黑树存储。

4. Hashtable类

关键特点:无序、key唯一、key和value不允许为null、线程安全;

数据结构:哈希表 = 数组 + 单向链表。

5. ConcurrentHashMap类

关键特点:无序、key唯一、key和value不允许为null、线程安全;

三、Collections类

集合算法工具类,封装了集合的常用功能算法。

常用方法:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值