Java集合相关的常用工具类简介说明

2023-11-08

转自:

Java集合相关的常用工具类简介说明

下文笔者将讲述java集合类中常用的工具类简介说明,如下所示

Java中的集合类既可以当做放其他数据的容器
 又可以当做常见的数据结构使用
Java中提供了很多好用的工具类来操作这些集合类

java常用工具类说明

JDK本身提供的工具类 
Guava提供的工具类 
Apache common-Collection提供的工具类

JDK提供的工具类

Arrays
Collections
Objects

Arrays是操作数组对象的工具类
Collections是操作集合对象的工具类
Objects是操作引用数据类型对象的工具类

Arrays的常用方法

普通排序

Arrays.sort(int[] a)
Arrays.sort(int[] a, int fromIndex, int toIndex)

并行排序:JDK1.8新增

Arrays.parallelSort(int[] a)
Arrays.parallelSort(int[] a, int fromIndex, int toIndex)

并行计算:
  JDK1.8新增
  支持函数式编程
   根据传入的方法进行一次计算 
Arrays.parallelPrefix(int[] array, IntBinaryOperator op)
Arrays.parallelPrefix(int[] array, int fromIndex, int toIndex, IntBinaryOperator op)

二分法查找
前提是该数组已经进行了排序

Arrays.binarySearch(int[] a, int key)
Arrays.binarySearch(int[] a, int fromIndex, int toIndex, int key)

判断两个数组是否相等

Arrays.equals(int[] a, int[] a2)

对数组进行填充

Arrays.fill(int[] a, int val)
Arrays.fill(int[] a, int fromIndex, int toIndex, int val)

复制数组

Arrays.copyOf(int[] original, int newLength)
    返回赋值后的数组,数组长度为newLength。
Arrays.copyOfRange(int[] original, int from, int to)

toString
将元素用","隔开
包裹在"[ ]"内

Arrays.toString(int[] a)
Arrays.deepToString(Object[] a)方法内部调用了a.toString()。

更改元素值
JDK1.8新增
支持函数式编程

setAll(int[] array, IntUnaryOperator generator)
setAll(long[] array, IntToLongFunction generator)
setAll(double[] array, IntToDoubleFunction generator)
setAll(T[] array, IntFunction<? extends T> generator)

数组转集合

Arrays.asList(T... a) 返回List<T>

生成并行遍历Spliterator
JDK1.8新增

Arrays.spliterator(int[] array)
Arrays.spliterator(int[] array, int startInclusive, int endExclusive)
int、long、double和实现了Spliterator接口的类具有该类型方法

生成Stream类
JDK1.8新增

Arrays.stream(int[] a)
Arrays.stream(int[] array, int startInclusive, int endExclusive)
int、long、double和实现了Stream接口的类具有该类型方法。

Collections的常用方法

排序

Collections.sort(List list) 
T或其父类需要实现Comparable接口
Collections.sort(List list, Comparator<? super T> c) 

Collections.sort()的源码
public static <T> void sort(List<T> list, Comparator<? super T> c) {
  list.sort(c);
}

List.sort()源码

default void sort(Comparator<? super E> c) {
	Object[] a = this.toArray();
	Arrays.sort(a, (Comparator) c); // 调用Arrays.sort()来进行排序
	ListIterator<E> i = this.listIterator();
	for (Object e : a) {
		i.next();
		i.set((E) e);
	}
}
注意事项:
Collections.sort()最终调用的是Arrays.sort()进行排序。

查到索引

Collections.binarySearch(List<? extends Comparable<? super T>> list, T key) Collections.binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

顺序反转

Collections.reverse(List<?> list)

乱序 Collections.shuffle(List<?> list)

指定元素互换

Collections.swap(List<?> list, int i, int j)

填充

Collections.fill(List<? super T> list, T obj)

复制

Collections.copy(List<? super T> dest, List<? extends T> src)

求最大值最小值

Collections.min(Collection<? extends T> coll)
Collections.min(Collection<? extends T> coll, Comparator<? super T> comp)
Collections.max(Collection<? extends T> coll)
Collections.max(Collection<? extends T> coll, Comparator<? super T> comp)

转动元素

Collections.rotate(List<?> list, int distance)

distance可以接受负数
将list元素整体向后移动distance的距离
原来最后的distance个元素放到最前面(类似与一个圆圈转动)

替换元素

Collections.replaceAll(List list, T oldVal, T newVal)

子集合索引

Collections.indexOfSubList(List source, List target)
Collections.lastIndexOfSubList(List source, List target)
如果不是子集合,返回-1

转换为不可变集合

Collections.unmodifiableCollection(Collection<? extends T> c)
将集合转换为不可变集合read-only
装饰者模式
使用final修饰iterator
增删元素的方法throw new UnsupportedOperationException()

Collections.unmodifiableSet(Set<? extends T> s)
Collections.unmodifiableList(List<? extends T> list)
Collections.unmodifiableMap(Map<? extends K, ? extends V> m)

转换为同步集合

Collections.synchronizedCollection(Collection c)
Collections.synchronizedCollection(Collection c, Object mutex) 指定mutex对象作为同步锁,将集合转换为线程安全的同步集合。装饰着模式,方法内使用了 synchronized (mutex) { ... }保证线程安全
Collections.synchronizedSet(Set s)
Collections.Collections.synchronizedSet(Set s, Object mutex)
Collections.synchronizedList(List list)
Collections.synchronizedList(List list, Object mutex)
Collections.synchronizedMap(Map<K, V>)

元素受限制集合

Collections.checkedCollection(Collection c, Class type)
由于JDK1.5引入了泛型,采用该方法,保证运行期集合中增加的元素只能是指定的类型。同样是装饰着模式。
Collections.checkedQueue(Queue queue, Class type)
Collections.checkedSet(Set, Class)
Collections.checkedList(List, Class)
Collections.checkedMap(Map<K, V>, Class, Class)

生成空的不可变集合

Collections.emptyIterator()
Collections.emptyListIterator()
Collections.emptyEnumeration()
Collections.emptySet()
Collections.emptyList()
Collections.emptyMap()

只有1个元素的不可变集合

Collections.singleton(T)
Collections.singletonList(T)
Collections.singletonMap(K, V)

拥有n个相同元素的不可变集合

Collections.nCopies(int, T)

反序比较器

Collections.reverseOrder(Comparator)
返回一个Comparator,返回值与参数值是相反顺序的比较器

转换为枚举类型的API

Collections.enumeration(Collection)
返回Enumeration

将Enumeration转换为集合

Collections.list(Enumeration)
返回ArrayList

元素在集合中的个数

Collections.frequency(Collection<?>, Object)
返回int

两个元素是否有交集

Collections.disjoint(Collection, Collection)
返回boolean

增加元素

addAll(Collection<? super T> c, T... elements)
由于List接口拥有listItegertor()方法
与List相关的大部分操作内部会判断阀值
超过阀值则采用listIterator遍历
小于阀值则采用for循环索引遍历
不同的方法阀值不同

Objects类
Objects.equals(Object a, Object b)

  public static boolean equals(Object a, Object b) {
    return a == b || (a != null && a.equals(b));
  }

Guava工具类

集合接口 属于JDK还是*Guava* 对应的Guava工具类
Collection JDK Collections2:不要和java.util.Collections混淆
List JDK Lists
Set JDK Sets
SortedSet JDK Sets
Map JDK Maps
SortedMap JDK Maps
Queue JDK Queues
Multiset Guava Multisets
Multimap Guava Multimaps
BiMap Guava Maps
Table Guava Tables

Apache提供的Collection

Apache提供的集合工具类功能也非常强大
还提供了集合的求交集、并集和差集等功能 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java集合相关的常用工具类简介说明 的相关文章

  • 使用 Guice 注入类集合

    我正在尝试用 Google Guice 2 0 注入东西 我有以下结构 FooAction implements Action BarAction implements Action 然后我有一个带有以下构造函数的 ActionLibrar
  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • 如何在 Java 中访问嵌套的 HashMap?

    我有一个 Java 中的 HashMap 其中的内容 你们可能都知道 可以通过以下方式访问 HashMap get keyname 如果一个 HashMap 位于另一个 HashMap 中 即嵌套的 HashMap 我将如何访问内容 我可以
  • Quarkus 不以编程方式选择 bean

    我试图以编程方式选择 bean 但 quarkus 不会注入 bean 并引发异常 不支持吗 public enum ReportType ONE TWO Qualifier Retention RUNTIME Target METHOD
  • 如何在log4j的配置文件中为文件附加器提供环境变量路径

    我有一个log4j xml配置文件 和一个RollingFileAppender我需要提供用于存储日志的文件路径 问题是我的代码将作为可运行的 jar 部署在 Unix 机器上 所以如果我传递这样的参数 value logs message
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • 如何为小程序提供对文件系统写入的访问权限

    我在设置小程序的策略文件时遇到问题 我是第一次这样做 不知道如何在java中设置小程序的策略文件 实际上我想授予小程序在文件系统上写入的权限 为此我必须向小程序授予文件权限 所以我创建了一个名为 java policy 的文件 并将以下代码
  • 在 Java 中创建 T 的新实例

    在C 中 我们可以定义一个泛型class A
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • 合并两个地图的最佳实践是什么

    如何将新地图添加到现有地图 地图具有相同的类型Map
  • JAXB 编组器无参数默认构造函数

    我想从 java 库中编组一个 java 对象 当使用 JAXB marschaller 编组 java 对象时 我遇到了一个问题 A 类没有无参数默认构造函数 我使用Java Decompiler来检查类的实现 它是这样的 public
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • Java和手动执行finalize

    如果我打电话finalize 在我的程序代码中的一个对象上 JVM当垃圾收集器处理这个对象时仍然再次运行该方法吗 这是一个大概的例子 MyObject m new MyObject m finalize m null System gc 是
  • Java:一个函数有多种返回类型...可以使用泛型吗?

    为了简单起见 我有一些程序 如下所示 public String fetchValueAsString String key public DateTime fetchValueAsDateTime String key 我想要类似的东西
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

    有谁知道 freemarker 标签来检查 freemarker 文件中的 spring 安全角色和用户名 我从网络上的几个资源中发现以下代码将打印登录的用户名 但它没有打印用户名 而是打印 登录为
  • 使用自定义比较器在 Java 中创建 SortedMap

    我想创建一个TreeMap在 Java 中具有自定义排序顺序 排序后的键是字符串 需要根据第二个字符进行排序 这些值也是字符串 示例地图 Za FOO Ab Bar 您可以像这样使用自定义比较器 Comparator
  • 如何使用注释处理 Hibernate 和 Spring 中的连接查询?

    我正在使用 Spring 和 Hibernate 以及 MySQL 开发应用程序 我是 Hibernate 新手 完成了基本任务 现在我需要在选择查询中应用联接以使用注释从多个表中获取数据 我已经搜索过但仍然没有任何想法 这是我的数据库表和
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这
  • 如何使用 Jest 从 ElasticSearch 获取索引列表

    我正在尝试使用 Jest 检索索引列表 但我只得到 Stats statistics new Stats Builder build result client execute statistics 如何从结果中检索索引列表 除了统计之外

随机推荐

  • Codeforces Round #808 (Div. 2)

    小吃一波分 A Difference Operations 贪心从左往右推过去就好 首先a2肯定要是a1的倍数 不然减不到0 同样的a3也一定要是a2的倍数 但是这里a2可能被操作成a1的其他倍数 比如1 2 3 先变成 1 1 3 然后把
  • CSS基础

    CSS CSS全称层叠样式表 Cascading Style Sheets 是一种标记语言 用于给HTML结构设置样式 如 文字大小 颜色 元素宽高等 HTML搭建结构 CSS添加样式 实现结构与样式分离 CSS编写位置 行内样式 写在元素
  • 【ChatGPT】:告别单调对话,我带你体验

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 前端炫酷代码分享 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架构咱们从0说 数据流通的精妙之道 文章目录 前言 1
  • 微信的转账记录删除了还能恢复吗?2个办法教你找回

    微信的转账记录删除了还能恢复吗 除了聊天记录外 好像还有很多朋友对于转账记录的恢复问题呼声也蛮高的 所以 小编这期就给大家带来找回微信转账记录的办法 分别有2个 赶紧进入正题 我们一起来看看到底是什么办法吧 方法1 手机微信上找回微信的转账
  • phpstrom查看代码总行数_一个统计PHP代码行数的小代码

    想统计一下项目中一共有多少行代码 结果没找到什么好的工具 就自己写了一个 效率不怎么样 Created by PhpStorm User luyanfeng Date 16 7 12 Time 下午1 45 param dir return
  • 【Qt】编译QtCreator

    一 Ubuntu14 04编译QtCreator 4 0 3 1 准备工作 编译工具要求 Qt gt 5 5 0 g gt 4 7 2 编译步骤 cd
  • python3字符串内括号匹配分析器匹配分析字符串内括号的匹配闭合情况

    python3字符串内括号匹配分析器 匹配分析字符串内括号的匹配闭合情况 可通过print打印匹配情况 高亮显示错误处 思路 遍历字符串 检测到起始括号后加入到open队列中 位置 字符 检测到闭合括号后检测队列最后一位是否是对应的起始括号
  • 洛谷P1085 不高兴的津津

    题目描述 津津上初中了 妈妈认为津津应该更加用功学习 所以津津除了上学之外 还要参加妈妈为她报名的各科复习班 另外每周妈妈还会送她去学习朗诵 舞蹈和钢琴 但是津津如果一天上课超过八个小时就会不高兴 而且上得越久就会越不高兴 假设津津不会因为
  • 对js对象、数组扁平化的理解

    数组 对象扁平化主要运用的有两个知识点 一个是数据类型的判断 另一个则是递归的运用 instanceof 判断数据类型 obj instanceof Object 判断对象 arr instanceof Array 判断数组 先来一段网上c
  • go高性能并发服务器,【Zinx第四章-全局配置】Golang轻量级并发服务器框架

    四 Zinx的全局配置 随着架构逐步的变大 参数就会越来越多 为了省去我们后续大频率修改参数的麻烦 接下来Zinx需要做一个加载配置的模块 和一个全局获取Zinx参数的对象 4 1 Zinx V0 4增添全局配置代码实现 我们先做一个简单的
  • 电脑重装按键是什么

    一般在使用u盘重装系统的时候 我们需要插入启动盘进电脑 然后开机按启动快捷键进入u盘启动pe系统内重装系统 那么重装系统按键是什么呢 下面 小编就把电脑重装系统按什么键的步骤分享给大家 工具 原料 系统版本 win10 品牌型号 联想yog
  • 组合、子集问题汇总

    子集的问题的思路也分两个方向 一种是解空间树是关于每个数选还是不选 结点取值范围就是true or false 解向量的长度是固定的 即candidates的个数 而且只有完全解才是问题的解 解向量不是直接的答案 而是标志每个candida
  • 【Matlab学习笔记】【函数学习】size参数

    size A 函数是用来求矩阵的大小的 你必须首先弄清楚A到底是什么 大小是多少 比如说一个A是一个3 4的二维矩阵 1 size A 直接显示出A大小 输出 ans 3 4 2 s size A 返回一个行向量s s的第一个元素是矩阵的行
  • mis服务器系统,MIS系统中服务器"推"技术的实现

    摘要 PUSH技术作为一项先进的信息传播技术 自1996年诞生以来 基于Web 的PUSH技术迅速发展 在Internet上得到了迅速而广泛的应用 本文从企业 管理系统的开发与应用角度出发 提出了基于MIS系统中实现和运用PUSH技术 的三
  • 嘉立创免费打板方法

    下载嘉立创下单助手软件 打开软件 在左侧领取下单优惠券 填写好下打样参数后 在优惠券中选择使用优惠券 即可免费打样 10CM 10CM以内 一个月限领2次优惠券 使用优惠券条件 当客户上个月的消费低于20元 甚至是无消费 我们也为完全用嘉立
  • halcon颜色识别

    halcon颜色识别 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 使用灰度平均值 循环读图进行处理 HSV模型区分颜色 通过不同颜色在灰度图中的阈值范围不同来区分颜色 使用阈值分别选出不同的颜色 dev cl
  • 使用loadrunner12选择谷歌录制,出现一直在加载的状态,进不去

    选择了浏览器和URL 点击录制 弹出浏览器 一直在加载 而且进入其他网址也进不去了 需要重新打开浏览器才可以 我本来以为是项目的问题 又打开了loadrunner自带的订票系统 发现在谷歌浏览器也是一样的 但是在ie浏览器却都可以正常打开
  • Java超过long型范围时使用的BigInteger和BigDecimal

    文章目录 前言 一 BigInteger 二 BigDecimal 前言 Java中当一个数的超过long型范围 能够表示64位的整数 时可以使用BigInteger和BigDecimal类型 一 BigInteger 推荐使用BigInt
  • 地震数据剖面图-matlab

    这里主要有四个参数需要设置 wigb m地震数据画图函数下载地址 a seismic data 地震数据 scale multiple data by scale 扫描频率 1 3 范围内任选一个数字 x x axis 所有道的位置信息 z
  • Java集合相关的常用工具类简介说明

    转自 Java集合相关的常用工具类简介说明 下文笔者将讲述java集合类中常用的工具类简介说明 如下所示 Java中的集合类既可以当做放其他数据的容器 又可以当做常见的数据结构使用 Java中提供了很多好用的工具类来操作这些集合类 java