Java集合实例

一、什么是Java集合实例:

指的是在 Java 程序中创建和使用的集合对象,这些对象用于存储和操作数据。Java 集合框架提供了一系列的接口和实现类,用于管理不同类型的数据集合。

二、Java集合的主要实例类型:

1. List(列表):

1)`ArrayList`:基于动态数组的实现,提供随机访问元素的高效性能。

2)`LinkedList`:基于双向链表的实现,适合频繁插入和删除元素的场景。

输出结果:

修改LinkedList元素的位置:

输出结果:

`LinkedList` 操作序列如下:

1. `list.add("一");` ------ 将 "一" 添加到列表末尾。
2. `list.addFirst("二");` ------ 将 "二" 添加到列表开头。
3. `list.addLast("三");` ------ 将 "三" 添加到列表末尾。
4. `list.add(0, "四");` ------ 在索引 0 处插入 "四",这会将之前位于位置 0 的元素向后移动一位。
5. `list.add("五");` ------ 将 "五" 添加到列表末尾。
6. `list.add(5, "六");` ------ 在索引 5 处插入 "六",这会将之后的所有元素向后移动一位。

在这些操作之后,`LinkedList` 的内容如下:

**- 初始时,`list` 为空。

  • 第一步,`list` 内容为 "一"。
  • 第二步,`list` 内容变为 "二", "一",因为 `addFirst` 方法将元素添加到列表的开头。
  • 第三步,`list` 内容变为 "二", "一", "三",`addLast` 方法将 "三" 添加到了列表的末尾。
  • 第四步,`list` 内容变为 "四", "二", "一", "三",`add(0, "四")` 方法在索引 0 处插入了 "四",并将之前的元素向后移动。
  • 第五步,`list` 内容变为 "四", "二", "一", "三", "五",`add("五")` 方法将 "五" 添加到了列表的末尾。
  • 最后一步,`list` 内容变为 "四", "二", "一", "三", "五", "六",`add(5, "六")` 方法在索引 5 处插入了 "六",此时 "五" 已经在索引 4 的位置,因此 "六" 被正确地插入到了 "五" 的后面。**

因此,最终输出的 `LinkedList` 内容应为:

输出结果:
"四", "二", "一", "三", "五", "六"

在这个列表中,"三"确实出现在"五"的前面,这是因为"三"是在"五"添加之前就已经添加到了列表的末尾(步骤 3),然后在后续的操作中,没有进一步的修改影响到"三"的位置,直到"五"和"六"被添加到了列表的末尾(步骤 5 和 6)。所以,"三"自然位于"五"的前面。

数据的删除:

结果输出:

删除元素:

  • `list.removeFirst();` ------ 移除 "四",列表变为:`"二", "一", "三", "五", "六", "三", "三"`

  • `list.removeLast();` ------ 移除最后一个 "三",列表变为:`"二", "一", "三", "五", "六", "三"`

  • `list.remove("三");` ------ 移除列表中第一次出现的 "三",列表变为:`"二", "一", "五", "六", "三"`

  • `list.remove(2);` ------ 移除索引 2 的元素 "五",列表变为:`"二", "一", "六", "三"`

总结一下,`removeFirst()` 移除了列表的第一个元素,`removeLast()` 移除了列表的最后一个元素,`remove("三")` 移除了列表中第一次出现的 "三",而 `remove(2);` 移除了索引 2 的元素,此时 "五" 已经不在索引 2 的位置,因此实际上移除的是 "五" 被删除后索引 2 处的元素,即 "六" 前面的 "一"。但根据描述,`remove(2);` 实际上移除的是列表中修改后索引 2 处的元素,即原本的 "五" 被删除后的 "六",这导致最终列表为 `"二", "一", "六", "三"`。

3)`Vector`:类似于 `ArrayList`,但线程安全。

2. Set(集合):

1) `HashSet`:基于哈希表的实现,不允许重复元素,元素无序。

1)调用名为Set的接口,将值由该接口储存起来

2)是定义的接口只接收String类型数据

3)实例化HashSet对象,该对象是Set接口的其中一个类

2) `TreeSet`:基于红黑树的实现,不允许重复元素,元素按照自然顺序或自定义比较器排序。

排序:

默认是升序排序:

重写排序方法使排序方法为降序排序:

查找和删除元素:

子集和迭代器:

3)`LinkedHashSet`:结合了 `HashSet` 的高速特性和 `LinkedHashMap` 的迭代顺序,元素按插入顺序排列。

3. Map(映射):

1) `HashMap`:基于哈希表的实现,存储键值对,键不能重复,不保证映射的顺序。

输出结果:

2)`TreeMap`:基于红黑树的实现,存储键值对,键不能重复,键值对按照键的自然顺序或自定义比较器排序。

3)`LinkedHashMap`:结合了 `HashMap` 的高速特性和 `LinkedHashMap` 的迭代顺序,映射按照插入顺序排列。

添加和打印:

访问顺序:

移除最旧的条目:

覆盖重写 removeEldestEntry方法

4. Queue(队列):

1)`ArrayDeque`:基于数组的双端队列实现,可以高效地从两端添加和移除元素。

2)`LinkedList`:由于其双向链表的性质,也常被用作队列。

5. Stack(栈):

- `Stack`:基于 `Vector` 的后进先出(LIFO)栈实现,但通常推荐使用 `Deque` 或 `List` 来实现栈的功能,因为 `Stack` 类是遗留的。

相关推荐
九皇叔叔5 分钟前
【09】SpringBoot4 MyBatisPlus 增删改查(CRUD)
java·mybatis·mybatisplus
凉茶钱12 分钟前
【吃透C++】万字解析类和对象
开发语言·c++
白杨尚青34 分钟前
C++入门篇(十):string(上)——认识string:构造与三大遍历(一条龙讲透operator[]、迭代器、auto、范围for)
java·开发语言·c++·笔记·stl
可乐鸡翅yeah_39 分钟前
hls.js 切换多个视频源,新手开发常见踩坑
开发语言·前端·javascript·ios·ffmpeg·音视频·safari
Tanshu_API君42 分钟前
API 聚合平台选型指南:从参数拆解到生产落地的十个评估维度
开发语言·api
Chen—LSN43 分钟前
C语言——⽂件操作(1)
c语言·开发语言·c++·经验分享·笔记·算法·链表
狗凯之家源码网1 小时前
PHP 开源 IM 即时通讯系统效果实测与功能展示
开发语言·开源·php
anew___1 小时前
《从零手写操作系统 (11):文件系统初探——initrd与VFS抽象层》
java·javascript·算法
天天向上2911 小时前
Spring AI 实战:14 个踩坑记录,其中一个让我的测试全绿但产品是坏的
java·开源
正在走向自律1 小时前
从只写接口到独立交付前后端,飞算JavaAI能给Java后端工程师多少溢价?
java·springboot·ai编程·全栈开发·java求职·飞算javaai·金九银十