如何在 Java 中比较两个 ArrayList

2024年9月5日 | 阅读 6 分钟

在 Java 中比较两个 ArrayList 有以下几种方法

  • Java equals() 方法
  • Java removeAll() 方法
  • Java retainAll() 方法
  • Java ArrayList.contains() 方法
  • Java contentEquals() 方法
  • Java Stream 接口

Java equals() 方法

Java List 接口的 equals() 方法将指定的对象与列表进行相等性比较。它覆盖了 Object 类的 equals() 方法。

语法

此方法接受一个 object 作为参数,用于与列表进行相等性比较。如果指定的对象等于列表,则返回 true,否则返回 false

示例

在下面的示例中,我们创建了两个 ArrayList:firstListsecondList。使用 equals() 方法比较两个列表,返回 true。我们还在 secondList 中添加了一个元素,以使 firstList 和 secondList 之间产生差异。现在,如果我们执行比较,它将返回 false

输出

[Apple, Pears, Guava, Mango]
[Apple, Pears, Guava, Mango]
true
false

Java removeAll() 方法(查找缺失的元素)

Java ArrayList 类的 removeAll() 方法用于移除列表中所有包含在指定集合中的元素。它覆盖了 AbstractCollection<E> 类的 removeAll() 方法。

语法

此方法接受一个 Collection 作为参数,其中包含要从此列表中移除的元素。如果此列表因调用而发生更改,则返回 true

示例

在下面的示例中,我们创建了两个 ArrayList:firstListsecondListremoveAll() 方法移除了 firstList 的所有元素,因为这些元素也存在于 secondList 中,除了 **Papaya**。因此,**Papaya** 是 firstList 中的缺失元素。因此,它返回 **Papaya**。如果两个列表具有相同的元素,该方法将返回一个**空列表 []**。

输出

[Papaya]

让我们看另一个 removeAll() 方法的示例,该示例返回 firstList 中不存在于 secondList 中的元素。

示例

输出

First array list: 
[12, 4, 67, 90, 34]
Second array list: 
[12, 4, 67, 0, 34]
Un-common element of the first list: 
[90]

Java retainAll() 方法(返回两个列表中的共同元素)

Java ArrayList 类的 retainAll() 方法仅保留列表中也存在于其他列表中的元素。它覆盖了 AbstarctCollection<E> 类的 retainAll() 方法。

语法

此方法接受一个 Collection 作为参数,其中包含要在列表中保留的元素。如果此列表因调用而发生更改,则返回 true

示例

在此示例中,我们使用 Arrays 类的 asList() 方法创建了两个 ArrayList:firstListsecondList。asList() 方法返回指定数组的列表视图。

输出

First arraylist: 
[M, W, J, K, T]
Second arraylist: 
[M, W, E, K, T]
Common elements in both list:
[M, W, K, T]

Java ArrayList.contains() 方法

Java ArrayList.contains() 方法用于比较两个不同 ArrayList 的元素。Java ArrayList.contains() 方法覆盖了 AbstrarctCollection<E> 类的 contains() 方法。

语法

此方法解析要检查其在列表中是否存在的一个元素。如果找到匹配项,则返回 true,否则返回 false

示例

在此示例中,我们创建了两个 String 类型的 ArrayList:firstListsecondList。我们使用 contains() 方法比较了这些 ArrayList。如果 firstList 的元素与 secondList 的元素匹配,则返回 Yes 并将此值存储到 thirdList 中。同样,如果元素不匹配,则返回 No

输出

[Yes, No, No]

Java contentEquals() 方法

Java contentEquals() 方法比较 StringStringBuffer,并返回一个 boolean 值。它属于 String 类。

语法

此方法接受 StringBuffer 作为参数,用于与 String 进行比较。如果 String 表示与指定的 StringBuffer 相同的字符序列,则返回 true,否则返回 false

示例

在此示例中,我们创建了两个 String 类型的 ArrayList:firstListsecondList。我们创建了一个静态方法 compareList(),该方法将两个 ArrayList ls1ls2 作为参数,并返回一个 boolean 值。该方法将列表转换为 StringcontentEquals() 方法将 String 与指定的 StringBuffer 进行比较。

我们在 secondList 中添加了另一个元素以创建两个列表之间的差异,然后再次调用 compareList() 方法,该方法返回 false

输出

When Lists are same: true
When Lists are not same: false

Java Stream 接口

Java Stream 是一个接口。它属于 java.util 包。它提供了一个 filter() 方法,用于根据给定元素过滤流元素。这是一个**中间**操作。

语法

此方法接受 Predicate(函数式接口)作为参数,并返回一个包含结果元素的新流。

collect() 方法

在以下示例中使用的另一个方法是 Stream 接口的 collect() 方法。

它使用 Collector 对该流的元素执行可变归约操作。Collector 封装了用作 collect(Supplier, BiConsumer, BiConsumer) 参数的函数。它允许**重用**收集策略和组合收集操作。这是一个**终端**操作。

语法

Collectors.toList() 方法

toList()Collectors 类的静态方法。它属于 java.util.Stream.Collectors 类。

语法

其中 T 是元素的类型。它返回一个 Collector,该 Collector 以无序(或遇到的)顺序将所有输入元素收集到一个 List 中。

示例

在以下示例中,我们创建了两个 String 类型的 ArrayList:firstListsecondListfilter() 方法返回一个 List,其中包含同时存在于两个 List 中的共同元素。

输出

First List: [Java, Python, Ruby, Go]
Second List: [Java, Python, Ruby, Go, Perl]
Common elements: [Java, Python, Ruby, Go]

下一个主题Java 教程