java常用数据结构及其接口

embedded/2025/4/2 6:38:30/

Java 提供了丰富的集合框架及其数据结构,每个结构和接口都有独特的功能。以下是一些常用的数据结构和接口,以及它们的关键方法:

### 接口及其实现

1. **List 接口**
   - 实现类:`ArrayList`、`LinkedList`、`Vector`
   - 关键方法:
     - `add(E e)`
     - `get(int index)`
     - `remove(int index)`
     - `size()`
     - `contains(Object o)`

2. **Set 接口**
   - 实现类:`HashSet`、`LinkedHashSet`、`TreeSet`
   - 关键方法:
     - `add(E e)`
     - `remove(Object o)`
     - `contains(Object o)`
     - `size()`
     - `isEmpty()`

3. **Queue 接口**
   - 实现类:`LinkedList`、`PriorityQueue`
   - 关键方法:
     - `offer(E e)`
     - `poll()`
     - `peek()`
     - `remove()`
     - `element()`

4. **Map 接口**
   - 实现类:`HashMap`、`LinkedHashMap`、`TreeMap`
   - 关键方法:
     - `put(K key, V value)`
     - `get(Object key)`
     - `remove(Object key)`
     - `containsKey(Object key)`
     - `containsValue(Object value)`
     - `keySet()`
     - `values()`
     - `entrySet()`

5. **Deque 接口**
   - 实现类:`LinkedList`、`ArrayDeque`
   - 关键方法:
     - `addFirst(E e)`
     - `addLast(E e)`
     - `removeFirst()`
     - `removeLast()`
     - `peekFirst()`
     - `peekLast()`
     - `offerFirst(E e)`
     - `offerLast(E e)`

### 数据结构简介

- **ArrayList**:动态数组,支持快速随机访问,但在插入和删除操作时可能较慢。
- **LinkedList**:双向链表,适合频繁插入和删除操作。
- **HashSet**:不允许重复元素,无序。
- **TreeSet**:有序集合,使用红黑树实现。
- **HashMap**:键值对存储,允许快速查找。
- **LinkedList(作为 Queue 和 Deque)**:同时支持队列和双端队列操作。
- **PriorityQueue**:基于优先级的队列,元素根据自然排序或比较器排序。

这些数据结构和接口在不同场合各有适用,可以根据需要选择合适的数据结构

当然,以下是对每个关键方法的解释:

### List 接口

1. **`add(E e)`**:
   - 将元素 `e` 添加到列表末尾。

2. **`get(int index)`**:
   - 返回列表中指定位置的元素。

3. **`remove(int index)`**:
   - 移除列表中指定位置的元素,并返回该元素。

4. **`size()`**:
   - 返回列表中的元素数量。

5. **`contains(Object o)`**:
   - 如果列表中包含指定的元素,则返回 `true`。

### Set 接口

1. **`add(E e)`**:
   - 将元素 `e` 添加到集合中,若集合中已存在相同元素,则不改变集合并返回 `false`。

2. **`remove(Object o)`**:
   - 从集合中移除指定的元素 `o`。

3. **`contains(Object o)`**:
   - 如果集合中包含指定的元素,则返回 `true`。

4. **`size()`**:
   - 返回集合中的元素数量。

5. **`isEmpty()`**:
   - 如果集合为空,返回 `true`。

### Queue 接口

1. **`offer(E e)`**:
   - 将元素 `e` 添加到队列的尾部,成功返回 `true`,失败返回 `false`。

2. **`poll()`**:
   - 移除并返回队列头部的元素,如果队列为空,返回 `null`。

3. **`peek()`**:
   - 返回队列头部的元素,但不移除,如果队列为空,返回 `null`。

4. **`remove()`**:
   - 移除并返回队列头部的元素,如果队列为空,抛出 `NoSuchElementException`。

5. **`element()`**:
   - 返回队列头部的元素,但不移除,如果队列为空,抛出 `NoSuchElementException`。

### Map 接口

1. **`put(K key, V value)`**:
   - 将指定的键和值的映射关系存入 Map 中,如果键已存在,将替换对应的值。

2. **`get(Object key)`**:
   - 返回 Map 中指定键对应的值,如果不存在,返回 `null`。

3. **`remove(Object key)`**:
   - 移除 Map 中指定键的条目,并返回对应的值。

4. **`containsKey(Object key)`**:
   - 如果 Map 包含指定的键,返回 `true`。

5. **`containsValue(Object value)`**:
   - 如果 Map 包含指定的值,返回 `true`。

6. **`keySet()`**:
   - 返回 Map 中所有键的集合。

7. **`values()`**:
   - 返回 Map 中所有值的集合。

8. **`entrySet()`**:
   - 返回 Map 中所有键值对条目的集合。

### Deque 接口

1. **`addFirst(E e)`**:
   - 将元素 `e` 添加到双端队列的头部。

2. **`addLast(E e)`**:
   - 将元素 `e` 添加到双端队列的尾部。

3. **`removeFirst()`**:
   - 移除并返回双端队列头部的元素。

4. **`removeLast()`**:
   - 移除并返回双端队列尾部的元素。

5. **`peekFirst()`**:
   - 返回双端队列头部的元素,但不移除,如果队列为空,返回 `null`。

6. **`peekLast()`**:
   - 返回双端队列尾部的元素,但不移除,如果队列为空,返回 `null`。

7. **`offerFirst(E e)`**:
   - 将元素 `e` 添加到双端队列的头部,成功返回 `true`,失败返回 `false`。

8. **`offerLast(E e)`**:
   - 将元素 `e` 添加到双端队列的尾部,成功返回 `true`,失败返回 `false`。

这些方法提供各种操作来管理元素的存储、检索和更新,适用于不同的数据结构场景。


http://www.ppmy.cn/embedded/134584.html

相关文章

socket编程---UDP

目录 一、socket 二、socket接口 1.流程原理 2.代码 前言 提示:这里可以添加本文要记录的大概内容: socket编程又称套接字编程,指进行网络通信程序的编写 提示:以下是本篇文章正文内容,下面案例可供参考 一、soc…

UDP组播测试

支持组播的接口: ip a | grep MULTICAST 环回接口虽然显示不支持组播,实际也可以用于本地测试。 添加路由(非必须?): ip route add 239.0.0.0/24 via 10.10.10.206 dev eth0 开放防火墙: 查…

将机器人六轴坐标转为4*4矩阵(Opencv/C++)

已知机器人六轴坐标x,y,z,rx,ry,rz&#xff0c;其中xyz表示空间位置坐标&#xff0c;rx,ry,rz是欧拉角&#xff1b; 需要将这六个值转为4*4的矩阵以便后续其它处理运算。 代码如下&#xff1a; #include <opencv2/core.hpp> #include <iostream> #include <cm…

解决Redis缓存穿透(缓存空对象、布隆过滤器)

文章目录 背景代码实现前置实体类常量类工具类结果返回类控制层 缓存空对象布隆过滤器结合两种方法 背景 缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库 常见的解决方案有两种&#xff0c;分别…

江协科技STM32学习- P30 FlyMCU串口下载STLink Utility

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

【缓存与加速技术实践】NoSQL之Redis部署安装与基础命令

文章目录 关系型数据库与非关系型数据库关系型数据库SQL定义SQL语句主流产品 非关系型数据库NoSQL定义主流产品 区别数据存储方式不同扩展方式不同对事务性的支持不同应用场景结构对比 补充 RedisRedis 的特点与优势Redis 的使用场景哪些数据适合放入缓存中&#xff1f;Redis 为…

构建安全的用户登录API:从请求验证到JWT令牌生成

构建安全的用户登录API&#xff1a;从请求验证到JWT令牌生成 为了实现这个后端POST /api/users/login端点&#xff0c;我们可以使用Node.js和Express框架&#xff0c;并结合一些常用的库如jsonwebtoken、bcrypt和express-validator来处理验证和密码校验。下面是一个完整的示例…

20.04Ubuntu配置opencv并使用头文件

跟着我的步骤一步步来 第一步&#xff1a;你可以使用以下命令安装OpenCV&#xff1a; sudo apt-get update sudo apt-get install libopencv-dev第二步&#xff1a;检查是否安装成功&#xff0c;成功的话会返回版本 pkg-config --modversion opencv由于我安装的4开头的版本&…