Java集合工具

Java零基础-集合:集合框架中的工具类 Java是一种广泛使用的编程语言,而集合框架是Java开发中常用的工具之一。集合框架包含了一系列的接口、类和算法,用于存储和操作对象。在集合框架中,工具类扮演着重要的角色,为开发人员提供了便利的方法和功能。本文将介绍集合框架中的工具类,包括其简介、源代码解析、应用场景案例、优缺点分析和类代码方法介绍。同时,还会提供具体的Java代码测试用例,以便读者更好地理解和应用这些工具类。本文将重点介绍Java集合框架中的工具类,旨在帮助读者了解和使用这些工具类。 阅读详情

诚然,在Java世界中,用的非常广泛的数据结构乃集合也,由Collection及Map衍合而来的多功能结构的集合类和接口,让我们随行随用。然而,工欲善其事,必先利其器,个人的工具箱中,必然应该收藏很多集合工具利器。

一、Collections

javadoc对其有如下解释

此类包含了许多特有的静态方法,用于操作集合或返回集合实例,同时还提供许多处理集合和包装器的多态实现,用于获取一些拥有特定功能的集合。
如果传入给此类任一方法的参数为null,则该方法会抛出NullPointerException。
通常,涉及到的多态实现都有简要的文档描述,这些文档应该是一种注意事项,而不是一种规范,在满足多态规范的前提下,这些实现可由其他算法自由替换。(例如,所使用的算法不需要归并排序,但它必须是稳定的)
此类还包含有”破坏性”的集合实现算法,如果集合不支持相应的突变原语(mutation primitives),那么当修改集合时,该算法会抛出UnsupportedOperationException异常,例如set方法。如果调用对集合没有影响,该算法可能会抛该异常,但不是必须的。例如,对一个有序的不可变集合调用sort方法时,此时可能会抛UnsupportedOperationException但也可能不会。

常用方法

1.排序方法与排序器

默认为比较器,正序排序
public static <T extends Comparable<? super T>> 
void sort(List<T> list) 

传入自定义比较器
public static <T> void sort(List<T> list, Comparator<? super T> c) 

逆序排序
static void reverse(List<?> list) 

逆序排序器
public static <T> Comparator<T> reverseOrder()

public static <T> Comparator<T> reverseOrder(Comparator<T> cmp)

2.随机排列方法

public static void shuffle(List<?> list)

public static void shuffle(List<?> list, Random rnd) 

3.交换元素

public static void swap(List<?> list, int i, int j)

4.填充值与拷贝集合

用obj全部填充到list中
public static <T> void fill(List<? super T> list, T obj)

public static <T> void copy(List<? super T> dest, List<? extends T> src) 

赋值N个
public static <T> List<T> nCopies(int n, T o)

5.二分查找

默认查找
public static <T>  int binarySearch(List<? extends Comparable<? super T>> list, T key)
自定义查找规则
public static <T> int binarySearch(List<? extends T> list, T key, Comparator<? super T> c)

6.获取最大最小元素

public static <T extends Object & Comparable<? super T>> T min(Collection<? extends T> coll)

public static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp)

public static <T extends Object & Comparable<? super T>> T max(Collection<? extends T> coll)

public static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp)

7.集合中索引集合

public static int lastIndexOfSubList(List<?> source, List<?> target)

public static int indexOfSubList(List<?> source, List<?> target)

8.获取不可变集合与同步集合

public static <T> List<T> unmodifiableList(List<? extends T> list)

public static <K,V> Map<K,V> unmodifiableMap(Map<? extends K, ? extends V> m)

public static <T> Set<T> unmodifiableSet(Set<? extends T> s)

public static <T> List<T> synchronizedList(List<T> list)

public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)

9.获取空元素集合与单例集合

public static final <T> Set<T> emptySet()

public static final <T> List<T> emptyList()

public static final <K,V> Map<K,V> emptyMap()

public static <T> Set<T> singleton(T o)

public static <T> List<T> singletonList(T o)

public static <K,V> Map<K,V> singletonMap(K key, V value) 

10.其他零散方法

对象比较
static boolean eq(Object o1, Object o2) 

o在c中出现的次数
public static int frequency(Collection<?> c, Object o)

添加元素
public static <T> boolean addAll(Collection<? super T> c, T... elements)

二、Guava

大名鼎鼎,Guava也(https://github.com/google/guava)
User Guide: https://github.com/google/guava/wiki
Maven依赖

<dependency>
  <groupId>com.google.guava</groupId>
  <artifactId>guava</artifactId>
  <version>18.0</version>
</dependency>
Guava Collections 起步

对于任何编程语言,集合皆不可或缺。不用集合,我们几乎无法写出任何有意义的程序,Guava起始于google-collections, 但谷歌早已并之于Guava中,在com.google.common.collect 包一窥便得之。如今,与Guava中其他包相比,集合包中仍有数量繁森的家族成员。囿于此,不能面面俱到的去探索所有繁枝细叶,但我们将倾尽全力去探寻其最深的奥妙处,并应用于日常必须中,我们将对如下内容追本溯源。(此章节翻译自Bill Bejeck – Getting Started with Google Guava)

  • Lists, Maps, Sets提供的常用静态方法
  • 不可变集合
  • Bimaps, 不仅可以keys to values, 而且可以values to keys
  • Table类型, Map到Map的集合类型
  • Multimaps, 一键多值类型
  • FluentIterable类,提供一系列用于处理Iterable实例的接口
  • Ordering类,与Comparators一起赋予许多增强功能

1.FluentIterable
FluentIterable提供了许多有益的接口,并可以一种流畅的链式风格编写代码,使之可读性良好。

FluentIterable.filter方法

FluentIterable.filter方法采用Predicate 作为参数,如果参入的Predicate 返回true,则每个元素都将被验证并被保留,如果没有元素满足条件,则将返回一个空Iterable。如下例子将演示from 和filler 方法。

@Test
public void testFilter() throws Exception {
Iterable<Person> personsFilteredByAge=               FluentIterable.from(personList).filter(new     Predicate<Person>() {
    @Override
    public boolean apply(Person input) {
        return input.getAge() > 31;
    }
});
assertThat(Iterables.contains(filtered, person2),is(true));

FluentIterable.transform方法
transform方法是一种映射操作,其通过Function来 应用每一个元素。它可生成一个新的与原始iterable具有同样大小的转换后的iterable,它与filter 方法不同,它不会任意移除元素,如下例子演示一下。

@Test
public void testTransform() throws Exception {
List<String> transformedPersonList =
FluentIterable.from(personList).transform(new       Function<Person, String>() {
    @Override
    public String apply(Person input) {
        return Joiner.on('#').join(input.getLastName(),
            input.getFirstName(), input.getAge());
    }
}).toList();
assertThat(transformed.get(1), is("Flintstone#Fred#32"));
}

2.Lists、Sets、 Maps
Lists、Sets, Maps,是一套工具类,分别用于操作List, Set,Map接口及其实现类,他们最便利的方法是生成相应的实现类实例。

Lists常用方法

创建list系列
public static <E> ArrayList<E> newArrayList()
public static <E> ArrayList<E> newArrayList(E... elements) 
public static <E> LinkedList<E> newLinkedList()
public static <E> LinkedList<E> newLinkedList()
public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList()
public static <E> ArrayList<E> newArrayListWithCapacity

转换对象
public static <F, T> List<T> transform( List<F> fromList, Function<? super F, ? extends T> function)

截取子集合返回size个集合
public static <T> List<List<T>> partition(List<T> list, int size)

反转
public static <T> List<T> reverse(List<T> list)

Sets常用方法

public static <E> HashSet<E> newHashSet()
public static <E> HashSet<E> newHashSet(E... elements) 
public static <E> HashSet<E> newHashSetWithExpectedSize(int expectedSize)
public static <E> LinkedHashSet<E> newLinkedHashSet()
并集
public static <E> SetView<E> union( final Set<? extends E> set1, final Set<? extends E> set2) 
set1中有set2中没有
public static <E> SetView<E> difference(final Set<E> set1, final Set<?> set2)
交集
public static <E> SetView<E> intersection(final Set<E> set1, final Set<?> set2)

Maps常用方法

public static <K, V> HashMap<K, V> newHashMap()
public static <K, V> LinkedHashMap<K, V> newLinkedHashMap()
public static <K, V> ConcurrentMap<K, V> newConcurrentMap()
public static <K, V1, V2> Map<K, V2> transformValues(
      Map<K, V1> fromMap, Function<? super V1, V2> function)

演示Maps.uniqueIndex方法

 public static <K, V> ImmutableMap<K, V> uniqueIndex(
      Iterable<V> values, Function<? super V, K> keyFunction) 

List<Book> books = someService.getBooks();
Map<String,Book>  bookMap =  Maps.uniqueIndex(books.iterator(),new
    Function<Book, String>(){
        @Override
        public String apply( Book input) {
            return input.getIsbn();
        }
});
FANUC机器人_KAREL编程入门学习(1) 阅读详情

相关推荐

时间序列聚类在股票市场分析中的实践与优化

时间序列聚类是一种面向动态行为建模的无监督学习方法,其核心在于通过语义感知的距离度量(如DTW)捕捉价格形态的相位弹性与结构相似性,而非依赖静态数值或标签驱动。相比K-Means等传统算法,它能有效缓解金融时序中普遍存在的噪声敏感、对齐失效与形态失真问题,从而提升聚类结果的市场可解释性与策略鲁棒性。该技术已广泛应用于市场状态识别、行业行为分群、异常交易监测等场景,并成为构建可验证量化分析框架的关键预处理层。本文聚焦A股真实行情数据,详解从原始OHLCV到可聚类时间序列的完整链路,涵盖DTW距离计算、层次聚类

weixin_34220179的博客 830

lists这个类无法使用maven打包

org.assertj assertj-core

oppoppoppo的专栏 1782

直流电动机的建模仿真(1)他励,串励和并励电动机建模仿真

本文根据不同励磁方式的直流电动机的接线原理图,建立了相应的数学模型,然后根据与数学模型对应的等效电路以及模拟机械运动方程的等效电路,用Matlab/simulink中的SpecializedPower system库中的电路元件,建立了他励,并励和串励直流电动机的全等效电路仿真模型,经过与Matlab自带的直流电动机仿真模型比较以及仿真实例验证,所建立的仿真模型时完全正确的。

weixin_45670943的博客 7520

maven 笔记

当前项目已解析依赖:mvn dependency:list当前项目依赖树:mvn dependency:tree依赖分析:mvn dependency:analyze排除依赖:在dependencies--》dependency--》添加节点exclusions--》exclusion,注明groupId、artifactId...

ShangYT的专栏 365

保姆级教程:在STM32H750VBT6上跑起来CMSIS-DSP库(基于CubeMX+Keil)

本文详细介绍了在STM32H750VBT6微控制器上配置和运行CMSIS-DSP库的全过程,包括开发环境搭建、CubeMX工程配置、Keil工程设置以及DSP库的实际应用示例。通过FFT频谱分析和音频均衡器等实战案例,展示了如何利用STM32H750VBT6的硬件FPU加速DSP运算,提升实时信号处理性能。

weixin_30236595的博客 458

二相混合式步进电机闭环矢量控制simulink仿真(含仿真文件)

在位置跟踪伺服系统中二相混合式步进电机闭环矢量控制simulink仿真

qq_39023633的博客 2万+

初窥Maven之三:对List<SystemStatus>,以value值做降序排列

在Pom.xml里边添加两个依赖, &lt;dependency&gt; &lt;groupId&gt;commons-collections&lt;/groupId&gt; &lt;artifactId&gt;commons-collections&lt;/artifactId&gt; &lt;version&gt;3.2.2&lt;/version&gt; &l

People of solitary 262

DDS信号发生器设计避坑指南:从AD9834配置到巴特沃斯滤波实战

本文详细解析了基于AD9834芯片的DDS信号发生器设计中的关键技术要点与常见陷阱,涵盖时钟源选择、寄存器配置时序、巴特沃斯滤波器设计等核心内容。针对中高频段信号质量优化,提供了实用的解决方案和代码示例,帮助工程师规避设计误区,提升信号发生器的性能和稳定性。

2y3u4i5o6p的博客 782

Guava系列:FluentIterable使用方法(List条件过滤)

目录 场景 demo 场景 list集合过滤数据 demo package com.nio4444.demo; import com.google.common.base.Predicate; import com.google.common.collect.FluentIterable; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import lombok.D.

NIO4444 1343

新手必看:TwinCAT死活扫不到倍福CX5020?别慌,先检查这3个地方(附静态IP配置)

本文详细介绍了TwinCAT软件无法扫描到倍福CX5020控制器的常见问题及解决方案。从网络连通性检查、系统环境配置到静态IP设置,提供了一套完整的排查流程和优化建议,帮助新手快速解决通信问题,确保设备稳定运行。

weixin_27219587的博客 364

996引擎 - 读写变量性能测试

单轮100万次读写,取3轮平均耗时(毫秒),有效读取率均为100%,数值越小性能越优。

灵台方寸山斜月三星洞 244

【笔记整理】—— 2.5 Maven | JDBC提炼

JDBC JDBC是JAVA官方定义的一组【JAVA程序连接数据库的接口】(为了对不同数据库提供统一的操作方法),接口的具体实现则交给各个数据库厂商。 Maven Maven是一种程序开发的辅助工具,可以帮助我们管理需要的第三方包(类库)。 Maven工作原理: 1、在maven项目中,配置需要用到的包的名称。 2、maven 首先会在本地仓库中查找是否存在该包,如果存在则直接导入引用;如果不存在...

Paul 的笔记库 523

MIPI D-PHY的校准测试

MIPI的校准测试困扰了很久,今天终于得以解决!

一只豌豆象的博客 3922

Java 集合工具类

工具类是 Java 集合操作的“瑞士军刀”,提供了排序、查找、同步化、不可修改化等实用功能,极大简化了集合处理代码。掌握其核心方法,能显著提高开发效率,同时保证代码的安全性和可读性。实际开发中,需根据场景灵活选择合适的方法,尤其注意线程安全和不可修改集合的特性。点击此处进入练习题。

2501_91241024的博客 1042

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

java集合工具类

开发工具与关键技术:MyEclipse 10、java语言、 作者:邓李庆 撰写时间: 2019年5月28日 下面小编给大家java的集合工具类:Collections,java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类里面提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象实现同步控制等方法。 排序操作: 修饰符 返回值类型 ...

博客 5148

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

java集合常用的工具类

这里整理一个java集合中常用的一个工具类具体有如下几个功能 1.取集合中对象的某两个属性封装成map,一个属性作为key,一个属性作为value 2.取集合对象中的某一个属性值封装成List 3.取集合对象中的某一元素用某一个分隔符隔开组合成一个字串 4.转换Collection所有元素(通过toString())为String, 中间以 separator分隔 5.转换Collect

飞血泪无痕的博客 5060

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java 集合 之 集合工具类Collections

集合知识补充,让集合操作变得简单高效

qq_73698057的博客 1343

java中集合工具类

是 Java 集合框架的核心工具类,覆盖了排序、查找、同步、不可变集合等高频操作。熟练使用其方法可以显著提升代码效率和健壮性。对于更复杂的需求(如函数式操作、扩展集合类型),可结合 Guava 等第三方库。

2402_83164836的博客 443

Java集合工具类

Java集合工具类是Java编程语言中最常用的工具之一。Java集合框架提供了一套标准的接口和类,用于处理集合数据类型,如列表、集合、队列和映射等。Java集合框架提供了一组通用的工具类,用于提供集合操作的功能。在本篇技术博客中,我们将详细介绍Java集合工具类,包括使用场景、常用方法和示例代码等。

hj1993的博客 893

Java—集合工具类

集合中的元素工具类排序: Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序、查询和修改等操作,还提供了将集合对象置为不可变、对集合对象实现同步控制等方法。这个类不需要创建对象,内部提供的都是静态方法。 简要列几个方法吧 (1)static void reverse(List<?> list):   反...

weixin_30566149的博客 147

java常用集合工具类_java 常用工具类Collection集合

java 常用工具类Collection集合常用的工具类封装,用来获取集合的交集等。/*** 初始化ArrayList** @param elements* @return*/@SafeVarargspublic static T ListT createArrayList(T... elements) {ListT list = new ArrayListT();for (T element :...

weixin_28907839的博客 189

java 集合工具类_Java 集合 Collections工具类

Java提供了一个操作Set、List和Map等集合的工具类:Collections,该工具类提供了大量方法对集合进行排序、查询和修改等操作,还提供了将集合对象置为不可变、对集合对象实现同步控制等方法排序操作void reverse(List list):反转指定List集合中元素的顺序void shuffle(List list):对List集合元素进行随机排序(shuffle方法模拟了“洗牌”...

weixin_33622043的博客 181

【Java】Collections集合工具类

Collections -java.utils.Collections是集合工具类,用来对集合进行操作。部分方法如下: -public static <T> boolean addAll(Collection<T> c,T...elements):往集合中添加一些元素 -public static void shuffle(list<?> list)打乱顺序:打乱集合顺序 -public static <T> void sort(List<T&g

以梦为马,不日抵达。 206

JAVA-集合工具类

JAVA-集合工具类 一个伟大的灵魂,会强化思想和生命。——爱默生 Collections工具类集合框架的工具类。 Collections:集合框架的工具类。里面定义的都是静态方法。Collections和Collection有什么区别? Collection是集合框架中的一个顶层接口,它里面定义了单列集合的共性方法。 它有两个常用的子接口, List:对元素都有

Thingvellir的博客 1145

java 集合工具类_java 集合工具类 Collections 的介绍

原标题:java 集合工具类 Collections 的介绍作者丨haihui_yanghttps://blog.youkuaiyun.com/haihui_yang/article/details/80710844在平时写代码的过程中集合会经常被用到,类似于 Map、List、Set 等等,相应的,集合工具类也会被频繁的使用,下面我们来瞅一瞅 java.util 包下的 Collections 类提供了哪些...

weixin_39894233的博客 97

Java使用Collections集合工具类

Java 中的 Collections 是一个非常有用的工具类,它提供了许多静态方法来操作或返回集合。这个类位于 java.util 包中,主要包含对集合进行操作的方法,比如排序、搜索、线程安全化等。Collections 类的方法都是静态的,使用时直接通过类名调用,如 Collections.max(list)。这些方法大大简化了集合操作,特别是对 List 的常见处理。 

pan_junbiao的博客 1153
上一篇: Java 反射概述
下一篇: Java集合工具2--Arrays
Schele
博客等级 码龄14年 31粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值