Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

Java 集合(ArrayList、LinkedList、HashMap、HashSet、LinkedHashMap、LinkedHashSet)【补充复习】

  • [Java 集合概述](#Java 集合概述)
    • [Collection 接口继承树](#Collection 接口继承树)
    • [Map 接口继承树](#Map 接口继承树)
  • [Collection 接口方法](#Collection 接口方法)
    • [使用 iterator 接口遍历集合元素](#使用 iterator 接口遍历集合元素)
    • [使用 forearch 遍历集合元素](#使用 forearch 遍历集合元素)
  • [List 接口](#List 接口)
    • [List 实现类之一:ArrayList](#List 实现类之一:ArrayList)
    • [List 实现类之二:LinkedList](#List 实现类之二:LinkedList)
  • [Set 接口](#Set 接口)
    • [Set 实现类之一:HashSet](#Set 实现类之一:HashSet)
    • [Set 实现类之二:LinkedHashSet](#Set 实现类之二:LinkedHashSet)
  • [Map 接口方法](#Map 接口方法)
    • [Map 实现类之一:HashMap](#Map 实现类之一:HashMap)
    • [Map 实现类之二:LinkedHashMap](#Map 实现类之二:LinkedHashMap)

Java 集合概述

Java 中的集合主要分为 Collection 和 Map 两大体系

  • Collection 接口:
    • Set:元素无序、不可重复的集合。
    • List:元素有序、可以重复的集合。
  • Map 接口:具有映射关系 key-value 的集合。

Collection 接口继承树

Map 接口继承树

Collection 接口方法

Collection 提供的接口方法,set、list 都可以使用。


使用 iterator 接口遍历集合元素

  • iterator 对象称为迭代器(设计模式的一种),主要用于遍历 Collection 集合中的元素。
  • 所有实现了 Collection 接口的集合类都有一个 iterator() 方法。
java 复制代码
Iterator iterator = arrayList.iterator();
while (iterator.hasNext()) {
	System.out.println(iterator.next());
}

使用迭代器进行遍历的时候,迭代器会创建一个对集合内部的快照,并且在遍历的时候期望保持该集合的状态不变。如果迭代过程中集合的元素被改变(添加、删除、修改),迭代器的内部状态和集合的状态不一致就会抛出异常。

解决办法:

  1. 使用并发集合
  2. 删除元素时,可以使用迭代器自带的 remove 方法

使用 forearch 遍历集合元素

List 接口

List 接口提供了一些根据索引来操作集合元素的方法

java 复制代码
// 向指定位置添加元素
void add(int index, Object obj);

// 向指定位置添加一个集合
boolean addAll(int index, Collection objs);

// 获取指定位置的元素
Object get(int index);

// 返回第一个元素出现的下标
int indexOf(Object obj);

// 返回最后一个元素出现的下标
int lastIndexOf(Object obj);

// 移除指定位置的元素
Object remove(int index);

// 修改指定位置的元素
Object set(int index, Object obj);

// 获取集合中的一段元素,从 fromIndex 下标开始,到 toIndex - 1 下标位置
List subList(int fromIndex, int toIndex);

List 实现类之一:ArrayList

本质上是一个变成数组(默认长度是 10)

ArrayList 是线程不安全的,Vector 是线程安全的,即使为保证 List 线程安全,也不推荐使用 Vector。

List 实现类之二:LinkedList

对于频繁插入和删除元素的操作,建议是 LinkedList,效率会高。

新增方法:

java 复制代码
// 头部插入一个元素
void addFirst(Object obj);

// 尾部插入一个元素
void addLast(Object obj);

// 获取头部元素
Object getFirst();

// 获取尾部元素
Object getLast();

// 移除头部元素
Object removeFirst();

// 移除尾部元素
Object removeLast();

Set 接口

Set 判断两个对象是否相等使用的不是 ==,而是 equals 方法。

Set 实现类之一:HashSet

  • HashSet 不是线程安全的
  • 不能保证元素的排列顺序
  • 集合元素可以是 null
  • 当向 HashSet 集合中存入一个元素时,HashSet 会调用该对象的 hashCode() 方法来得到该对象的 hashCode 值,然后根据 hashCode 值来决定该对象在 HashSet 中的存储位置。
  • HashSet 集合判断两个元素相等的标准:两个对象通过 hashCode() 方法比较相等,并且两个对象的 equals() 方法返回值也相等。

Set 实现类之二:LinkedHashSet

  • LinkedHashSet 是 HashSet 的子类
  • LinkedHashSet 根据元素的 HashCode 值来决定元素的存储位置,同时使用链表维护元素的次序。

Map 接口方法

java 复制代码
// 添加元素
Object put(Object key, Object value);

// 移除元素
Object remove(Object key);

// 添加全部元素
void putAll(Map t);

// 清除元素
void clear();

// 根据 key 查询
Object get(Object key);

// 判断 key 是否存在
boolean containsKey(Object key);

// 判断 value 是否存在
boolean containsKey(Object value);

// 集合大小
int size();

// 判断是否为空
boolean isEmpty();

// 判断是否相等
boolean equals(Object obj);

Map 实现类之一:HashMap

  • HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 返回的 true,hashCode() 值也相等。
  • HashMap 判断两个 value 相等的标准是:两个 value 通过 equals() 返回的 true。

Map 实现类之二:LinkedHashMap

  • 按照插入顺序迭代
相关推荐
Yeauty11 小时前
渲染成图再 CLI 拼接,还是进程内直推?Rust 帧到视频的两条路
开发语言·rust·音视频
geovindu11 小时前
CSharp: Breadth First Search Algorithm and Depth First Search Algorithm
开发语言·后端·算法·c#·.net·搜索算法
景同学12 小时前
把 AI 用到线上运维:可行、有效,前提是喂足信息——一次 Full GC 排障实录
java·人工智能·后端
库克克12 小时前
【C++】set 与multiset
开发语言·c++
Wang's Blog12 小时前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
C++、Java和Python的菜鸟12 小时前
第7章 后端Web实战(Tlias系统)
java
憧憬成为java架构高手的小白12 小时前
黑马八股--spring框架学习
java·学习·spring
唐青枫13 小时前
Java Picocli 实战详解:用注解写出好用的命令行工具
java
2zcode13 小时前
项目文档:基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
开发语言·神经网络·matlab·心力衰竭预测\
X-⃢_⃢-X13 小时前
四、OpenFeign远程调用
java·微服务·springboot·springcloud