Java中如何合并两个ArrayList

培训教学 潘老师 7个月前 (09-28) 686 ℃ (0) 扫码查看

学习如何将两个ArrayList合并成的单个ArrayList。还学习如何在组合列表中合并ArrayList而不包括重复项。

1.合并两个ArrayList并保留所有元素

这种方法保留来自两个列表的所有元素,包括重复元素。合并列表的大小将是两个列表大小的算术和。

1.1. 使用List.addAll()

addAll()方法是将给定列表的所有元素附加到另一个列表末尾的最简单方法。使用此方法,我们可以将多个列表合并成一个单一列表。

// 合并Arraylist示例
ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
listOne.addAll(listTwo);  //合并两个List
System.out.println(listOne);
System.out.println(listTwo);

程序输出:

[a, b, c, c, d, e]
[c, d, e]
提示:使用像guava或Apache commons lang这样的库可以有更多合并列表的方法,但它们都只使用addAll()方法。因此,最好直接使用此方法。

1.2. 使用Stream.flatMap()

Java 8流提供了解决大多数问题的一行解决方案,同时代码看起来更清晰。Stream的flatMap()方法可用于在单个流中获取两个或更多列表的元素,然后将流元素收集到ArrayList中。

推荐使用Stream,因为我们无需修改原始的List实例,而是创建一个包含来自两个列表的元素的第三个List。

ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
List<String> combinedList = Stream.of(listOne, listTwo)
        .flatMap(x -> x.stream())
        .collect(Collectors.toList());
System.out.println(combinedList);

程序输出:

[a, b, c, c, d, e]

在这些示例中,我们合并了列表,但在最终列表中有重复的元素。在许多情况下,这可能不是期望的输出。接下来,我们将学习如何合并这些List,并去除重复项。

2.合并两个ArrayList,排除重复元素

要获得合并列表中排除重复元素的列表,有两种方法:

2.1. 使用LinkedHashSet

Java Sets仅允许唯一的元素。当我们将两个列表都放入一个Set中,该Set将表示组合的所有唯一元素的列表。在我们的示例中,我们使用LinkedHashSet,因为它还将保留元素的顺序。

ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
//将 List中的项添加到Set中
Set<String> set = new LinkedHashSet<>(listOne);
set.addAll(listTwo);
//将 Set 转换为 ArrayList
ArrayList<String> combinedList = new ArrayList<>(set);
System.out.println(combinedList);

程序输出:

[a, b, c, d, e]

2.2. 使用removeAll/addAll

这是一个两步过程,我们可以

  • 从第一个列表中删除第二个列表的所有元素
  • 然后将第一个列表添加到第二个列表中。

这将为用户提供不包含重复元素的合并列表。

ArrayList<String> listOne = new ArrayList<>(Arrays.asList("a", "b", "c"));
ArrayList<String> listTwo = new ArrayList<>(Arrays.asList("c", "d", "e"));
List<String> listTwo = new ArrayList<>(listTwo);
listTwoCopy.removeAll(listOne);
listOne.addAll(listTwoCopy);
System.out.println(listOne);

程序输出:

[a, b, c, d, e]

以上就是Java中如何合并两个ArrayList的全部内容。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9323.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】