千家信息网

Java中各种集合类的是怎样合并的

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章给大家介绍Java中各种集合类的是怎样合并的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1 介绍集合类可谓是学习必知、编程必用、面试必会的,而且集合的操作十分重要;本文
千家信息网最后更新 2026年11月04日Java中各种集合类的是怎样合并的

这篇文章给大家介绍Java中各种集合类的是怎样合并的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

1 介绍

集合类可谓是学习必知、编程必用、面试必会的,而且集合的操作十分重要;本文主要讲解如何合并集合类,如合并两个数组,合并两个List等。通过例子讲解几种不同的方法,有JDK原生的方法,还有使用第三库的方法。

2 第三方库

引入十分常用的优秀的第三方库Guava和Apache Commons;通过配置pom.xml如下:

  com.google.guava  guava  28.1-jre  org.apache.commons  commons-collections4  4.4  org.apache.commons  commons-exec  1.3  org.apache.commons  commons-lang3  3.5

最新版本可以去官网搜索查看。

3 数组的合并

数据准备:

String[] arr1 = {"desk", "pen", "cup"};String[] arr2 = {"phone", "keyboard"};String[] expected = new String[]{"desk", "pen", "cup", "phone", "keyboard"};String[] result;

3.1 JDK方法

3.1.1 使用System.arraycopy

JDK为我们提供了一个复制数组的方法,这个方法参数较多,使用不是很灵活,但它是一个本地方法,效率高。代码如下:

//System.arraycopyresult = new String[arr1.length + arr2.length];System.arraycopy(arr1, 0, result, 0, arr1.length);System.arraycopy(arr2, 0, result, arr1.length, arr2.length);assertArrayEquals(expected, result);

3.1.2 使用Stream

Java 8的Stream提供了转化成数组的方法,可以通过将数组转化成Stream,合并Stream后再转化为数组,具体代码如下:

//Streamresult = Stream.concat(Arrays.stream(arr1), Arrays.stream(arr2))  .toArray(String[]::new);assertArrayEquals(expected, result);

使用的时候要注意Stream.toArray()的两个方法,例子中需要使用带参数的。

3.2 Guava

Guava提供了类ObjectArrays进行数组合并,注意需要指定数组存储的对象的类型,代码如下:

//Guavaresult = ObjectArrays.concat(arr1, arr2, String.class);assertArrayEquals(expected, result);

3.3 Apache Commons

Apache Commons提供了ArrayUtils进行合并,代码如下:

//Apache Commonsresult = ArrayUtils.addAll(arr1, arr2);assertArrayEquals(expected, result);

4 List的合并

数据准备:

List list1 = asList("desk", "pen", "cup");List list2 = asList("phone", "keyboard");List expected = asList("desk", "pen", "cup", "phone", "keyboard");List result = new ArrayList<>();

4.1 JDK方法

4.1.1 使用List.addAll

List接口定义了addAll的方法,代码如下:

//list.addAllresult.addAll(list1);result.addAll(list2);assertEquals(expected, result);

4.1.2 使用Stream

过程大体相似,合并Stream,然后转化为List,代码如下:

//Streamresult = Stream.concat(list1.stream(), list2.stream())  .collect(Collectors.toList());assertEquals(expected, result);

4.2 Guava

Guava提供了将Iterable转化为List的方法,代码如下:

//Guavaresult = Lists.newArrayList(Iterables.concat(list1, list2));assertEquals(expected, result);

4.3 Apache Commons

Apache Commons的工具类ListUtils提供了union()方法可以直接合并,代码如下:

//Apache Commonsresult = ListUtils.union(list1, list2);assertEquals(expected, result);

5 Set的合并

数据准备:

 Set set1 = Sets.newHashSet("desk", "pen", "cup", "phone", "keyboard");Set set2 = Sets.newHashSet("phone", "keyboard");Set expected = Sets.newHashSet("desk", "pen", "cup", "phone", "keyboard");Set result = Sets.newHashSet();

5.1 JDK方法

5.1.1 使用Set.addAll

同样,Set接口也有addAll()方法,代码如下:

//set.addAllresult.addAll(set1);result.addAll(set2);assertEquals(expected, result);

5.1.2 使用Stream

先合并Stream,再转化成Set,代码如下:

//Streamresult = Stream.concat(set1.stream(), set2.stream())  .collect(Collectors.toSet());assertEquals(expected, result);

5.2 Guava

一个方法搞定,代码如下:

//Guavaresult = Sets.union(set1, set2);assertEquals(expected, result);

5.3 Apache Commons

同样是一个方法,代码如下:

//Apache Commonsresult = SetUtils.union(set1, set2);assertEquals(expected, result);

6 Map的合并

代码如下:

Map map1 = ImmutableMap.of("One", 1, "Two", 2);Map map2 = ImmutableMap.of("Three", 3);Map expected = ImmutableMap.of("One", 1, "Two", 2, "Three", 3);Map result = Maps.newHashMap();

6.1 JDK方法

6.1.1 使用Map.putAll

使用Map接口提供的putAll()方法,代码如下:

//map.putAllresult.putAll(map1);result.putAll(map2);assertEquals(expected, result);

6.1.2 使用Stream

使用Stream进行合并Map相对麻烦一些,代码如下:

//Streamresult = Stream.of(map1, map2)  .map(Map::entrySet)  .flatMap(Collection::stream)  .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));assertEquals(expected, result);

6.2 Guava

使用builder()方法,代码如下:

//Guavaresult = ImmutableMap.builder()  .putAll(map1)  .putAll(map2)  .build();assertEquals(expected, result);

6.3 Apache Commons

一个`merge()方法搞定,代码如下:

//Apache Commonsresult = MapUtils.merge(map1, map2);assertEquals(expected, result);
方法 代码 数组 两个 接口 数据 准备 例子 参数 第三方 不同 优秀 相似 重要 兴趣 内容 可以通过 对象 小伙 小伙伴 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 广东猪兼强互联网科技有限公司 中关村互联网科技集团 金融科技创新监管互联网金融 世界互联网领先科技成果 安徽鑫晟辉互联网科技 奔汉互联网科技 互联网科技公司名称 金融科技和互联网金融 哈尔滨新华互联网科技 北京大学互联网科技怎么样 欧洲十大科技互联网公司 湖南一路畅行互联网科技 米聚互联网科技南京有限公司排面 互联网公司黑科技创始人 互联网企业科技类企业如何做账 互联网领先科技活动 福仕德教育科技互联网 保山浩联互联网科技有限公司 颐高云石互联网科技 与互联网科技公司 万达互联网科技 开启互联网科技时代小说 互联网和高科技公司 北京大学互联网科技怎么样 赶超互联网科技 微信多开 华夏互联网科技业 畅思互联网科技 科技赋能视角下互联网保险发展 安徽零酒互联网科技有限公司
0