java集合简介


一. java集合简单介绍

1. 什么是集合

集合类是Java数据结构的实现。Java的集合类是java.util包中的重要内容,它允许以各种方式将元素分组,并定义了各种使这些元素更容易操作的方法。Java集合类是Java将一些基本的和使用频率极高的基础类进行封装和增强后再以一个类的形式提供。——摘自百度百科java集合类

2. java集合框架图

在这里插入图片描述

二.

0. Collection接口

Collection接口时处理对象合集的根接口,公共方法如下

方法名功能
add(Object element): boolean添加一个新元素o到合集中
addAll(Collection c): boolean在指定索引位置处添加c中的所有元素
clear(): void从该合集中删除所有元素
contains(Object o)/containsAll(Collection c): boolean如果该合集包含元素o/包含c中所有元素,则返回true
equals(Collection c)如果该合集等同于另一个合集c,则返回true
hashCode(): int返回该合集的哈希码
isEmpty(): boolean若空则真
remove(Object o): boolean从该合集中移除元素o
removeAll(Collection c):boolean从该合集中删除c中的所有元素
retainAll(Collection c):boolean保留同时位于c和该合集中的元素
size(): int返回该合集的元素数目
toArray(): Object[]为该合集中的元素返回一个Object数组

addAll、removeAll、retainAll类似于并、差、交运算

1.迭代器

Iterator是一种经典的设计模式,用于在不需要暴露数据是如何保存在数据结构的细节的情况下,来遍历这个数据结构。
Collection接口继承自Iterable接口。Iterable接口中定义了iterator方法,该方法会返回一个迭代器,这个迭代器可以用next()方法顺序访问集合中的元素,可以用hasNext()方法来检测迭代器中是否还有更多的元素,以及remove()方法来一处迭代器返回的最后一个元素。

Collection<String> collection = new ArrayList<>();
collection.add("zerotrac yyds");
collection.add("sweetiee tql");
collection.add("mi na sang dai dai wo");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
    iterator.remove();
}
System.out.println(collection.size());

在这里插入图片描述

2.线性表

1)简介

ArrayList和LinkedList定义在List接口下。List接口继承自Collection接口,定义了一个允许重复的有序合集。List接口增加了面向位置的操作,并且增加了一个能够双向遍历线性表的线性表迭代器。

2)List接口中的通用方法

方法名功能
add(int index, Object element): boolean在指定索引位置处增加一个新元素
addAll(int index, Collection c): boolean在指定索引位置处添加c中的所有元素
get(int index): E返回该线性表指定索引位置处的元素
indexOf(Object element): int返回第一个匹配元素的索引
lastIndexOf(Object element): int返回最后一个匹配元素的索引
listIterator(int startIndex): ListIterator<E>返回针对从startIndex开始的元素的迭代器
remove(int index): E移除指定索引位置处的元素
set(int index, Object element): Object设置指定索引处的元素
subList(int fromIndex, int toIndex): List<E>返回从fromIndex到toIndex-1的子线性表

3)ListIterator接口中的方法

方法名功能
add(Object element): void添加一个指定的对象到线性表中
hasPrevious()/hasNext(): boolean当往回/往后遍历时,如果还有更多的元素,返回true
previous()/next(): E返回该线性表遍历器的前一个/后一个元素
nextIndex()/previousIndex()返回下一个/上一个元素的索引
set(E element):void使用指定元素替换previous()或next()返回的最后一个元素

4)数组线性表类ArrayList和链表LinkedList

ArrayList和LinkedList是实现List接口的两个具体类。ArrayList用数组存储元素,这个数组是动态创建的,如果元素个数超过了数组的容量,就创建一个更大的数组,并且将当前数组中的所有元素都复制到新数组中;LinkedList在链表中存储元素。

  • 两种类的选择:
    • 如果需要通过下标随机访问元素,而不再线性表的起始位置或者中间位置插入或删除元素,则选用ArrayList。
    • 如果程序需要在线性表的起始或中间位置上插入或删除元素,选用LinkedList。
ArrayList功能
ArrayList()使用默认的初始容量创建一个空的线性表
ArrayList(Collection c)从已经存在的合集中创建一个线性表
ArrayList(int initialCapacity)创建一个指定初始容量的空的数组线性表
trimToSize()将该ArrayList实例的容量裁剪到该线性表的当前大小
LinkedList功能
LinkedList()使用默认的初始容量创建一个空的线性表
LinkedList(Collection c)从已经存在的合集中创建一个线性表
addFirst/addLast(E element)添加元素到该线性表的头部/尾部
getFirst/getLast()返回该线性表的第一个/最后一个元素
removeFirst()/removeLast()从该线性表中返回并删除第一个/最后一个元素

3. 向量和栈

向量类简单介绍

Vector类和ArrayList类都继承了AbstractList类。除了包含用于访问和修改向量的同步方法外,Vector类和ArrayList类是一样的。同步方法用于防止两个或多个线程同时访问和修改某个向量时引起数据损坏。对于许多不需要同步的应用程序来说,使用ArrayList比使用Vector更高效。

Stack

栈类Stack时作为Vector类的扩展来实现的,方法如下表格

方法功能
Stack()创建一个空的栈
empty()如果栈是空的,返回真
peek(): E返回栈顶元素
pop(): E返回并移除栈顶元素
push(Object o): E压入一个元素
search(Object o): int返回该栈中指定元素的位置

4.队列

Queue接口

Queue接口继承自java.util.Collection, 加入了插入、提取和检验等操作。

方法功能
offer(E element): boolean插入一个元素到队列中
poll(): E获取并移除队列的头元素,如果队列为空则返回null
remove(): E获取并移除队列的头元素,如果队列为空则抛出异常
peek(): E获取队列的头元素,如果队列为空则返回null
element(): E获取队列的头元素,如果队列为空则抛出异常

Deque、LinkedList和ArrayDeque

LinkedList类实现了Deque接口和List接口,Deque接口又继承自Queue接口。因此,可以用LinkedList创建一个队列。LinkedList很适合用于队列操作,因为它可以高效地在线性表的两端插入、移除元素。
Deque支持在两端插入和删除元素。deque(double-ended queue) 是双端队列的简称,读音“deck”,Deque继承自Queue,增加了从队列两端插入和删除元素的方法。方法addFirst(e)/removeFirst(e)/addLast(e)/removeLast(e)/getFirst(e)/getLast(e)都在Deque接口中定义。
ArrayDeque是Deque接口的一个实现,使用了可变数组,所以没有容量上的限制。
同时,ArrayDeque是线程不安全的,在没有外部同步的情况下,不能再多线程环境下使用。
ArrayDeque是Deque的实现类,可以作为栈来使用,效率高于Stack;
也可以作为队列来使用,效率高于LinkedList。
需要注意的是,ArrayDeque不支持null值。
ArrayDeque详解

5.Set

6.Map

三. 参考资料

Java集合(一)、什么是Java集合?
《Java语言程序设计(进阶篇)》

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值