java——集合框架

news2025/1/11 19:46:14

文章目录

  • 接口
  • 实现(类)
  • 算法
    • 1. 排序算法
    • 2. 查找算法
    • 3. 拷贝算法
    • 4. 填充算法
    • 5. 比较算法
    • 6. 随机算法
    • 7. 迭代器算法
    • 8. 交集、并集、差集
    • 9. 分割集合
    • 10. 数组和集合的互转

在这里插入图片描述

集合框架是一个用来代表和操纵集合的统一架构。所有的集合框架都包含如下内容:

接口

是代表集合的抽象数据类型。例如 Collection、List、Set、Map 等。之所以定义多个接口,是为了以不同的方式操作集合对象

下面是 Java 集合框架中所有的集合接口及其对应的特点,以表格形式展示:

接口描述
Collection最基本的集合接口,一个 Collection 代表一组 Object
List有序的 Collection,使用此接口能够精确的控制每个元素插入的位置
Set不保存重复的元素
SortedSet继承于 Set,保存有序的集合
Map存储一组键值对,提供 key 到 value 的映射
Map.Entry描述在一个 Map 中的一个元素(键/值对),是一个 Map 的内部接口
SortedMap继承于 Map,使 Key 保持在升序排列
Enumeration这是一个传统的接口和定义的方法,已被迭代器所取代

以上是 Java 集合框架中所有的集合接口及其对应的特点。在实际开发中,可以根据需求选择适合的集合类型来存储和处理数据。

实现(类)

是集合接口的具体实现。从本质上讲,它们是可重复使用的数据结构,例如:ArrayList、LinkedList、HashSet、HashMap。

下面是 Java 集合框架中常用的一些集合实现类及其对应的特点,以表格形式展示:

实现类描述
AbstractCollection实现了大部分的集合接口
AbstractList继承于 AbstractCollection 并且实现了大部分 List 接口
AbstractSequentialList继承于 AbstractList,提供了对数据元素的链式访问而不是随机访问
LinkedList实现了 List 接口,允许有 null 元素,主要用于创建链表数据结构
ArrayList实现了 List 接口,实现了可变大小的数组,提供更好的性能
AbstractSet继承于 AbstractCollection 并且实现了大部分 Set 接口
HashSet实现了 Set 接口,不允许出现重复元素,不保证集合中元素的顺序
LinkedHashSet具有可预知迭代顺序的 Set 接口的哈希表和链接列表实现
TreeSet实现了 Set 接口,可以实现排序等功能
AbstractMap实现了大部分的 Map 接口
HashMap散列表存储键值对映射,根据键的 hashCode 值存储数据,具有快速的访问速度
TreeMap继承于 AbstractMap,并使用一颗树实现,支持自动排序
WeakHashMap继承于 AbstractMap 类,使用弱密钥的哈希表
LinkedHashMap继承于 HashMap,使用元素的自然顺序对元素进行排序
IdentityHashMap继承于 AbstractMap 类,比较文档时使用引用相等
Vector与 ArrayList 相似,但是是同步的,可以用在多线程的情况
Stack是 Vector 的子类,实现了一个标准的后进先出的栈
Dictionary是一个抽象类,用来存储键/值对,作用和 Map 类相似
Hashtable是 Dictionary 类的子类,位于 java.util 包中
Properties继承于 Hashtable,表示一个持久的属性集,属性列表中每个键及其对应值都是一个字符串
BitSet创建一种特殊类型的数组来保存位值

以上是 Java 集合框架中常用的一些集合实现类及其对应的特点。在实际开发中,可以根据需求选择适合的实现类来存储和处理数据。

算法

是实现集合接口的对象里的方法执行的一些有用的计算,例如:搜索和排序,这些算法实现了多态,那是因为相同的方法可以在相似的接口上有着不同的实现。
好的,下面将结合代码详细介绍 Java 集合算法的使用:

1. 排序算法

Java 集合框架中提供了两种排序算法:归并排序和快速排序。其中,Collections.sort() 方法和 Arrays.sort() 方法都已经进行了封装,可以直接使用。

归并排序示例代码:

List<Integer> list = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5);
Collections.sort(list);
System.out.println(list);

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们调用了 Collections.sort() 方法对其进行排序,并输出排序后的结果。

快速排序示例代码:

int[] arr = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));

以上代码中,我们创建了一个 int 类型的数组,并将一些数字添加到其中。然后,我们调用了 Arrays.sort() 方法对其进行排序,并输出排序后的结果。

2. 查找算法

Java 集合框架中提供了二分查找和线性查找两种查找算法。

二分查找示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int index = Collections.binarySearch(list, 4);
System.out.println(index);

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们调用了 Collections.binarySearch() 方法进行二分查找,并输出查找结果。

线性查找示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
int index = -1;
for (int i = 0; i < list.size(); i++) {
    if (list.get(i) == 4) {
        index = i;
        break;
    }
}
System.out.println(index);

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们使用 for 循环遍历集合,并进行线性查找,并输出查找结果。

3. 拷贝算法

Java 集合框架中提供了 Collections.copy() 方法和 System.arraycopy() 方法用于拷贝。

Collections.copy() 示例代码:

List<Integer> source = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> target = new ArrayList<>(source.size());
target.addAll(source);
Collections.copy(target, source);
System.out.println(target);

以上代码中,我们创建了一个 Integer 类型的 List 集合 source,并将一些数字添加到其中。然后,我们创建了一个空的 ArrayList 类型的 target 集合,并用 addAll() 方法将 source 集合的元素全部添加到 target 集合中。最后,我们使用 Collections.copy() 方法将 source 集合的元素拷贝到 target 集合中,并输出结果。

System.arraycopy() 示例代码:

int[] source = {1, 2, 3, 4, 5};
int[] target = new int[source.length];
System.arraycopy(source, 0, target, 0, source.length);
System.out.println(Arrays.toString(target));

以上代码中,我们创建了一个 int 类型的数组 source,并将一些数字添加到其中。然后,我们创建了一个空的 int 类型的数组 target,并使用 System.arraycopy() 方法将 source 数组的元素全部拷贝到 target 数组中,并输出结果。

4. 填充算法

Java 集合框架中提供了 Collections.fill() 方法和 Arrays.fill() 方法用于填充。

Collections.fill() 示例代码:

List<Integer> list = Arrays.asList
Integer[] arr = new Integer[5];
Collections.fill(Arrays.asList(arr), 0);
System.out.println(Arrays.toString(arr));

以上代码中,我们创建了一个长度为 5 的 Integer 类型的数组 arr,并使用 Arrays.asList() 将其转换为 List 集合。然后,我们使用 Collections.fill() 方法将该集合中所有元素都设置为 0,并输出结果。

Arrays.fill() 示例代码:

int[] arr = new int[5];
Arrays.fill(arr, 0);
System.out.println(Arrays.toString(arr));

以上代码中,我们创建了一个长度为 5 的 int 类型的数组 arr,并使用 Arrays.fill() 方法将其所有元素都设置为 0,并输出结果。

5. 比较算法

Java 集合框架中提供了 Collections.max()Collections.min() 方法用于比较。

示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
int max = Collections.max(list);
int min = Collections.min(list);
System.out.println("最大值:" + max);
System.out.println("最小值:" + min);

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们使用 Collections.max() 方法和 Collections.min() 方法找出该集合中的最大值和最小值,并输出结果。

6. 随机算法

Java 集合框架中提供了 Collections.shuffle() 方法用于随机操作。

示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Collections.shuffle(list);
System.out.println(list);

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们使用 Collections.shuffle() 方法对该集合进行随机排序,并输出结果。

7. 迭代器算法

Java 集合框架中提供了 Iterator 接口和 ListIterator 接口用于迭代操作。

示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

ListIterator<Integer> listIterator = list.listIterator();
while (listIterator.hasNext()) {
    System.out.println(listIterator.next());
}

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们使用 iterator() 方法获取列表的迭代器对象,并使用 hasNext()next() 方法对其进行遍历。接着,我们使用 listIterator() 方法获取列表的列表迭代器对象,并使用 hasNext()next()hasPrevious()previous() 等方法对其进行遍历。

除了以上介绍的常见集合算法,Java 集合框架中还提供了其他一些算法,下面也简单介绍一下:

8. 交集、并集、差集

Java 集合框架中提供了 retainAll() 方法和 removeAll() 方法分别用于求两个集合的交集和差集。

示例代码:

List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> list2 = Arrays.asList(3, 4, 5, 6, 7);
// 求交集
list1.retainAll(list2);
System.out.println(list1);
// 求差集
list1 = Arrays.asList(1, 2, 3, 4, 5);
list2 = Arrays.asList(3, 4, 5, 6, 7);
list1.removeAll(list2);
System.out.println(list1);

以上代码中,我们创建了两个 Integer 类型的 List 集合 list1 和 list2,并将一些数字添加到其中。然后,我们使用 retainAll() 方法对 list1 集合和 list2 集合进行求交集操作,并输出结果;接着,我们使用 removeAll() 方法对 list1 集合和 list2 集合进行求差集操作,并输出结果。

9. 分割集合

Java 集合框架中提供了 subList() 方法用于分割集合。

示例代码:

List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> subList = list.subList(1, 4);
System.out.println(subList);

以上代码中,我们创建了一个 Integer 类型的 List 集合,并将一些数字添加到其中。然后,我们使用 subList() 方法获取该集合的子集合,从下标 1 开始,到下标 4 前一个元素为止(即下标 1、2、3 的元素),并输出结果。

10. 数组和集合的互转

Java 集合框架中提供了 Arrays.asList() 方法和 Collection.toArray() 方法用于数组和集合之间的转换。

示例代码:

Integer[] arr = {1, 2, 3, 4, 5};
List<Integer> list = Arrays.asList(arr);
System.out.println(list);

list = Arrays.asList(6, 7, 8, 9, 10);
arr = list.toArray(new Integer[list.size()]);
System.out.println(Arrays.toString(arr));

以上代码中,我们创建了一个 Integer 类型的数组 arr,并将一些数字添加到其中。然后,我们使用 Arrays.asList() 方法将该数组转换为 List 集合,并输出结果;接着,我们将另一个 List 集合转换为 Integer 类型的数组,并输出结果。

这些算法是 Java 集合框架中常见的算法,可以帮助我们进行更加高效、便捷的集合操作和处理。在实际开发过程中,我们可以根据具体需求选择合适的算法来实现需要的功能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680002.html

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

相关文章

C++手撕红黑树

目录&#xff1a; 红黑树的概念红黑树的性质红黑树节点的定义 红黑树结构红黑树的插入操作红黑树的验证红黑树的代码实现 红黑树的删除红黑树与AVL树的比较红黑树的应用 总结 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结…

DevOps系列文章之 Spring Boot Docker打包

应用准备容器化&#xff0c;因为几十个应用从测试到发布太麻烦了&#xff0c;而且还会因为环境的因素导致部署中出现各种问题。为了在开发、测试、生产都能保持一致的环境&#xff0c;就引进了容器技术&#xff0c;而目前常用的应用使用基于spring boot的。 在Spring Boot应用…

AI数字人之语音驱动面部模型及超分辨率重建Wav2Lip-HD

1 Wav2Lip-HD项目介绍 数字人打造中语音驱动人脸和超分辨率重建两种必备的模型&#xff0c;它们被用于实现数字人的语音和图像方面的功能。通过Wav2Lip-HD项目可以快速使用这两种模型&#xff0c;完成高清数字人形象的打造。 项目代码地址&#xff1a;github地址 1.1…

Canal监听MySQL

Canal监听MySQL 1、Mysql数据库开启binlog模式 注意&#xff1a;Mysql容器&#xff0c;此处Mysql版本为5.7 #进入容器 docker exec -it mysql /bin/bash #进入配置目录 cd /etc/mysql/mysql.conf.d #修改配置文件 vi mysqld.cnf(1) 修改mysqld.cnf配置文件&#xff0c;添加如…

Android:安卓开发使用okHttp进行网络请求和MySQL数据库完成图书馆管理系统APP

1、总体目标 1.1 项目概述 项目名称&#xff1a;基于安卓平台的图书管理系统。 本项目旨在研发一个图书管理系统&#xff0c;实现图书馆的信息化管理。在方便用户在线浏览&#xff0c;借阅&#xff0c;归还图书&#xff0c;方便图书馆管理员对图书进行管理。能很好的为用户提…

从零开始理解Linux中断架构(7)--- Linux执行上下文之中断上下文

1 中断处理程序的基本要求 当前运行的loop是一条执行流,中断程序运行开启了另外一条执行流,从上一节得知这是三种跳转的第三类,这个是一个大跳转。对中断程序的基本要求就是中断执行完毕后要恢复到原来执行的程序,除了时间流逝外,原来运行的程序应该毫无感知。 具体到Armv…

如何设计一个短信发送功能

本文主要分享了如何设计一个发送短信功能。 一、总结简述 1.梳理多个平台短信API的发送参数&#xff0c;集成封装提供统一的API&#xff0c;支持多个短信平台&#xff08;阿里云、腾讯云、百度云、京东云、七牛云&#xff09;灵活切换 2.提供存储方案&#xff0c;表结构设计…

Redis数据库操作

Redis 命令参考 — Redis 命令参考http://doc.redisfans.com/ 1、Redis&#xff0c;远程词典服务器&#xff0c;是一个基于内存的键值型NoSQL数据库 特征&#xff1a; 键值型&#xff0c;支持多种不同数据结构&#xff0c;功能丰富 单线程&#xff0c;每个命令具备原子性 …

C语言督学营(中级阶段)

文章目录 中级阶段9.数据结构概述逻辑结构 与 存储结构时间复杂度、空间复杂度 10.11.12.线性表 (代码实战)线性表的定义、特点1.线性表的顺序存储(顺序表示)&#xff1a;顺序表静态分配动态分配顺序表的定义、初始化、插入、删除、按值查找、按位查找 操作 (代码)&#xff1a;…

go开发多云资产管理平台

go开发多云资产管理平台cmdb 代码仓库github.com/yunixiangfeng/gocmdb 云主机管理 主机资源监控 开发流程 Welcome to Beego | Beego bee new gocmdb/servercd gocmdb/servergo mod tidygo get -u github.com/beego/beego/v2 go get -u "github.com/astaxie/beego/o…

津津乐道设计模式 - 模版模式详解(以女友化妆流程带你彻底明白)

&#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Micro麦可乐的博客 &#x1f425;《Docker实操教程》专栏以最新的Centos版本为基础进行Docker实操教程&#xff0c;入门到实战 &#x1f33a;《RabbitMQ》…

JDBC-->java如何连接数据库(详细版小白必备)

个人名片&#xff1a; &#x1f405;作者简介&#xff1a;一名大二在校生&#xff0c;热爱生活&#xff0c;爱好敲码&#xff01; \ &#x1f485;个人主页 &#x1f947;&#xff1a;holy-wangle ➡系列内容&#xff1a; &#x1f5bc;️ tkinter前端窗口界面创建与优化 &…

工业相机——显微镜头/放大镜头

校准尺&#xff0c;最小测量刻度为0.1mm 上图为手机拍的看不清&#xff0c;放了一个网上找的图&#xff0c;校准的详细参数见下图 例如&#xff1a;物距为116mm的显微镜头&#xff0c;这种镜头没有景深&#xff0c;只能测镜头前端到物体116mm的物体 &#xff0c;几乎没有景深&a…

Vscode配置C/C++环境出现报错,导致不能运行代码,报错如下:

Vscode配置C/C环境出现报错&#xff0c;导致不能运行代码&#xff0c;报错如下&#xff1a; 问题描述—gcc : 无法将“gcc”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保路径正确&#xff0c;然后再试一次…

Hexo博客搭建 —— Next主题配置

Hexo博客搭建 —— Next主题配置 文章目录 Hexo博客搭建 —— Next主题配置配置文件区分站点配置文件主题配置文件 配置文件描述简称引入next主题-sitenext主题页面模式设置-next设置首页不显示全文-site设置博客文章持久化连接-site下载插件URL Setting 参考文档 配置文件区分…

【Docker】一文了解DockerFile

文章目录 Dockerfile 概念DockerFile的指令1、FROM 指定基础镜像2、RUN 执行命令3、COPY 复制文件4、ADD 更高级的复制文件5、ENV 设置环境变量6、EXPOSE7、VOLUME 定义匿名卷8、CMD容器启动命令9、ENTRYPOINT入口点10、USER 指定当前用户11、WORKDIR 指定工作目录12、LABEL为镜…

网络安全、Web安全、渗透测试之笔经面经总结含答案

以下为网络安全各个方向涉及的面试题&#xff0c;星数越多代表问题出现的几率越大&#xff0c;祝各位都能找到满意的工作。 注&#xff1a;本套面试题&#xff0c;已整理成pdf文档&#xff0c;但内容还在持续更新中&#xff0c;因为无论如何都不可能覆盖所有的面试问题&#xf…

4、数据库操作语句:聚合函数

目录 1、定义 2、常用的聚合函数 1&#xff09;Avg/sum&#xff1a;只适用于数值类型的字段&#xff08;或变量&#xff09;。 2&#xff09;Max/min:适用于数值类型、字符串类型、日期时间类型的字段&#xff08;或变量&#xff09; 3&#xff09;Count&#xff1a; ①作…

一起来学孟德尔随机化(Mendelian Randomization)

孟德尔随机化最近实在是太火了&#xff0c;想不关注都不行&#xff0c;最近也花了点时间研究了一下&#xff0c;和大家分享一下&#xff0c;共同学习。 什么是孟德尔随机化&#xff1f; 在19世纪&#xff0c;孟德尔用豌豆花作为实验材料&#xff0c;通过对豌豆花颜色、形状等特…

ESP-BOX的GUI移植

因为squareline studio软件中适配了ESP-BOX&#xff0c;所以作者本想直接使用该软件创建的工程&#xff0c;但是会出现花屏的现象&#xff0c;也不知道是不是没有做好esp-box-lite的适配。 因此只能先用squareline studio设计好GUI&#xff0c;然后再导出其代码&#xff0c;在其…