目录
集合的概述
Java 集合框架中的集合包括各种数据结构和容器,用于存储和操作数据。集合框架提供了各种方法来操作和管理集合,例如添加、删除、查找、排序、遍历等。
java集合框架中的Java 集合可以按照不同的维度进行分类,可以基于数据结构和映射的来分类集合。
其中一种常见的分类方式是:基本集合和高级集合。
基本集合包括:
- List:有序集合,可以包含重复元素。常用实现类有ArrayList和LinkedList。
- Set:无序集合,不包含重复元素。常用实现类有HashSet和TreeSet。
- Queue:队列,先进先出的顺序。常用实现类有LinkedList和PriorityQueue。
高级集合包括:
- Map:键值对的集合,每个元素都有一个唯一的键。常用实现类有HashMap和TreeMap。
- Stack:栈,后进先出的顺序。
- Deque:双端队列,既可以从头部插入和删除元素,也可以从尾部插入和删除元素。常用实现类有LinkedList和ArrayDeque。
一、Collection接口
Collection是Java 集合框架的根接口之一,提供了集合的基本操作,如添加、删除、迭代等。
// 1、添加元素
boolean add(E e) // 添加元素 e 到集合中
// 2、删除元素
boolean remove(Object o) // 从集合中移除指定的元素 o
// 3、检查集合
boolean contains(Object o): // 检查集合中是否包含指定的元素 o
boolean isEmpty() //检查集合是否为空。
// 4、集合大小
int size() // 返回集合中的元素数量
// 5、清空集合
void clear() // 移除集合中的所有元素
// 6、遍历集合
Iterator<E> iterator() // 返回集合的迭代器,用于遍历集合中的元素
// 7、转换为数组
Object[] toArray() // 将集合转换为数组
<T> T[] toArray(T[] a) // 将集合转换为指定类型的数组
// 8、批量操作
boolean addAll(Collection<? extends E> c) // 将指定集合 c 中的所有元素添加到当前集合中
boolean removeAll(Collection<?> c) // 从当前集合中移除指定集合 c 中的所有元素
boolean retainAll(Collection<?> c) // 保留当前集合中与指定集合 c 相同的元素,移除其他元素
这些方法提供了对集合中元素的基本操作,适用于各种实现 Collection 接口的集合类。
二、List接口
List集合包括List接口以及List接口的所有实现类。List接口继承 Collection 接口,因此包含Collection接口中的所有方法。
List接口的常用实现类有 ArrayLis t类和 LinkedList 类。
List集合特点:
- 有序性:元素按插入顺序排列,可以通过索引访问。
- 可重复性:可以包含重复的元素。
- 支持索引操作:通过索引可以快速访问和修改元素。
1、ArrayList
ArrayList 基于动态数组,具有高效的随机访问能力。同时提供动态调整大小和快速随机访问的特性,但在插入和删除操作上可能较慢,因为需要移动数组中的元素。
创建ArrayList类:
// 通过List实例化
List<E> list = new ArrayList();
// 基本声明
ArrayList<E> list = new ArrayList<>(); // E是存储元素的数据类型
// java7 及以上版本,可以省略后面的泛型参数
ArrayList<E> list = new ArrayList();
// 声明并初始化
// initialCapacity 是初始容量,指定 ArrayList 可以容纳多少元素
ArrayList<E> list = new ArrayList(initialCapacity);
// 声明并使用已有集合初始化
// collection 是一个 Collection 类型的对象
ArrayList<E> list = new ArrayList(collection);
2、LinkedList
LinkedList 使用链表结构保存数据。在链表中,每个元素(节点)包含数据和指向下一个节点的指针。通过这种方式,LinkedList 能够动态地分配和管理内存,支持高效的插入和删除操作。向集合插入或删除元素时,LinkedList 集合效率较高;而随机访问集合中的元素,LinkedList 集合效率较低。每个节点的存储位置不是固定的,因此它们在内存中的位置是非连续的。
LinkedList 类实现了 List 接口,因此它继承了这些接口的所有标准方法。此外,LinkedList 还提供了一些特有的方法,这些方法不是 List 接口的一部分,而是 LinkedList 类本身提供的。
// 添加元素
void addFirst(E e) // 将元素添加到集合的开头
void addLast(E e) // 将元素添加到集合的末尾
// 获取元素
E getFirst() // 返回集合的第一个元素
E gerLast() // 返回集合的最后一个元素
// 删除元素
E removeFirst() // 删除并返回集合的第一个元素
E removeLast() // 删除并返回集合的最后一个元素
E peekFirst() // 获取集合的第一个元素,但不移除它(如果集合为空,返回 null)
E peekLast() // 获取集合的最后一个元素,但不移除它(如果集合为空,返回 null)
E pollFirst() // 获取并移除集合的第一个元素(如果集合为空,返回 null)
E pollLast() // 获取并移除集合的最后一个元素(如果集合为空,返回 null)
三、Set接口
Set集合包括Set接口及其所有实现类。Set接口继承自Collection接口,因此包含Collection接口中的所有方法。
Set集合的常用实现类有 HashSet 类、LinkedHashSet 类和 TreeSet 类。
Set集合特点:
- 无序性:元素没有特定的顺序,无法按插入顺序访问,除非使用 LinkedHashSet或TreeSet 。
- 不允许重复:Set集合不允许包含重复的元素,每个元素在集合中只能出现一次。
- 不支持索引操作:不能通过索引访问元素,需要通过迭代器进行遍历。