java常用数据结构及其接口

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.mzph.cn/diannao/58309.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

git合并相关操作详解

在使用Git进行分支管理时,合并(merge)操作是非常常见的。下面是Git合并相关的详细步骤和一些常见的场景及注意事项。 一、 基本合并操作 假设我们有两个分支:main 和 feature,希望将 feature 合并到 main 上。 切换到目标分支 首先需要切换到你想合并到的分支。例如,切…

Lucas带你手撕机器学习——岭回归

岭回归(Ridge Regression) 一、背景与引入 在进行线性回归分析时,我们常常面临多重共线性的问题。多重共线性指的是自变量之间高度相关,这会导致回归系数的不稳定性,使得模型的预测能力降低。传统的线性回归通过最小…

模块化主动隔振系统市场规模:2023年全球市场规模大约为220.54百万美元

模块化主动隔振系统是一种用于精密设备和实验装置的隔振解决方案,通过主动控制技术消除振动干扰,提供稳定的环境。目前,随着微纳制造和精密测量技术的发展,对隔振系统的要求越来越高。模块化设计使得系统能够灵活适应不同负载和工…

STM32 第3章 如何用串口下载程序

时间:2024.10.28 一、学习内容 1、安装USB转串口驱动 1.1串口下载连接示意图 1、USB转串口模块在开发板上是一个独立的模块,可通过调帽与其他串口连接,USART1/2/3/4/5 2、只有USART1才具有串口下载的功能。 3、CH340是电平转换芯片,将电脑端输出的USB电平和单片机输…

移除字符串中空格_Java实现

package com.leetcode;/*** 移除字符串中空格*/ public class RemoveSpaceFromStr {public static String removeWhiteSpaceFromStr(String input){StringBuilder outputnew StringBuilder();char[] charsinput.toCharArray();for (char c : chars) {if(!Character.isWhitespac…

1.3 面向对象 C++面试问题

1.3.1 简述一下什么是面向对象,面向对象与面向过程的区别 什么是面向对象 面向对象(Object-Oriented Programming,OOP)是一种编程范式,它通过将现实世界中的实体抽象为“对象”来组织代码。面向对象编程关注对象及其交互&#x…

国产游戏的崛起与挑战:技术创新如何驱动未来发展

近年来,中国的游戏行业如星火燎原,国产游戏不仅在国内市场站稳了脚跟,更在国际市场上逐渐展露锋芒。从《原神》到《永劫无间》,这些作品以其精美的画面、复杂的物理引擎和智能化的AI技术赢得了广泛的赞誉。尽管如此,面…

STM32的hal库中,后缀带ex和不带的有什么区别

在STM32的HAL(硬件抽象层)库中,后缀带“ex”和不带“ex”的文件及其包含的内容存在显著的区别。这些区别主要体现在功能扩展性、使用场景以及API的层次上。 一、功能扩展性 不带“ex”后缀的文件: 这些文件通常包含标准的、核心…

Java中的访问修饰符详解

目录 1. public 2. protected 3. Default (无修饰符) 4. private 在Java编程语言中,访问修饰符是非常重要的一部分,它决定了类、变量、方法和构造器的访问级别。Java中主要有四种访问修饰符:public、protected、default(没有修…

行业首发|美格智能创新推出5G+Wi-Fi 7智能终端解决方案,端侧AI助力数智升维

在数字化时代的生产生活过程中,特殊场景下的通信需求愈发重要。高速、灵活、稳定的通信保障能够进一步提升生产生活的效率。随着5G网络的高速发展,一方面,其凭借低时延、高带宽、高可靠性和大规模连接的特性让移动终端的网络连接实现跨越式升…

WebSocket和HTTP请求的区别

1. 连接方式 HTTP请求:基于“请求-响应”模式。每次通信都要重新建立连接,客户端发送请求后服务器返回响应,连接就断开了。这种模式通常适合不频繁更新的数据,如静态页面的加载。WebSocket:支持长连接,连接…

Python是什么

Python在编程语言中的地位 特点使用看法 特点 优点: 语法语义简单,容易上手功能强大,应用广泛生态丰富,具有海量的成熟第三方库方便调用C/C编写的代码 缺点: 执行效率比较弱对多核并发程序不友好动态类型系统对大型项目不友好 使用 扬长避短 看法 我们要把Python当成一…

论文解析八: GAN:Generative Adversarial Nets(生成对抗网络)

目录 1.GAN:Generative Adversarial Nets(生成对抗网络)1、标题 作者2、摘要 Abstract3、导言 IntroductionGAN的介绍 4、相关工作 Related work5、模型 Adversarial nets总结 6.理论计算 Theoretical Results具体算法公式全局优化 Global O…

springdata同时集成mongodb和elasticsearch异常

错误 Invalid bean definition with name ‘bookEsRepository’ defined in com.db.repository.BookEsRepository defined in EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: 产生原因 【spring-boot-starter-data…

【32】C++流

目录 C流 读写文件:文件流 对文本文件流读写 写文本文件 读文本文件 对二进制文件流读写 写二进制文件 读二进制文件 对文件流按格式读写取数据 按指定格式写文件 按指定格式读文件 C流 IO: 向设备输入数据和输出数据 C的IO流 设备: 文件控制台特定的数…

21世纪20年代了, 居然遭遇扩容U盘!

扩容u盘前些年很泛滥, 所以也有针对扩容u盘的测试软件 h2testw h2testw的工作原理很简单, 就是往u盘里写文件,写满后再读取文件进行验证 如果没有h2test, 也可以往里面考大文件, 再拷贝出来, 不出错就表示…

Navicat导入Excel数据时数据被截断问题分析与解决方案

目录 前言1. 问题分析1.1 默认字段类型的影响1.2 MySQL诊断机制的限制 2. 解决方案2.1 修改字段长度2.2 修改Excel数据以影响推断2.3 检查导入工具的设置 3. 其他注意事项3.1 注册表的修改3.2 增加自增ID 4. 结语 前言 在数据库的日常操作中,将Excel数据导入MySQL是…

ubuntu常用文件操作

1. 查看文件和目录 列出目录内容: ls列出当前目录的文件和子目录。常用参数包括: ls -l:显示详细信息(权限、所有者、大小、时间等)。ls -a:显示隐藏文件(以 . 开头的文件)。ls -h&a…

SQL Server 当前日期及其未来三天的日期

当前日期及其未来三天的日期,并分别以 YYYY-MM-DD 和 yyyyMMdd 的格式展示 1、当前日期及其未来三天的日期,以 YYYY-MM-DD的格式展示 WITH CurrentDate AS (SELECT GETDATE() AS 当前日期 ) -- 使用 CONVERT 函数 SELECTCONVERT(VARCHAR(10), 当前日期,…

Ubuntu22.04版本左右,扩充用户可使用内存

1 取得root权限后,输入命令 lsblk 查看所有磁盘和分区,找到想要替换用户可使用文件夹内存的磁盘和分区。若没有进行分区,并转为所需要的分区数据类型,先进行分区与格式化,过程自行查阅。 扩充替换过程,例如…