如何在Java中比较两个ArrayList

本文概述

  • Java equals()方法
  • Java removeAll()方法(查找缺少的元素)
  • Java keepAll()方法(返回两个列表中的公共元素)
  • Java ArrayList.contains()方法
  • Java contentEquals()方法
  • Java Stream接口
有以下几种方法可以比较Java中的两个ArrayList:
  • Java equals()方法
  • Java removeAll()方法
  • Java keepAll()方法
  • Java ArrayList.contains()方法
  • Java contentEquals()方法
  • Java Stream接口
Java equals()方法List接口的Java equals()方法比较指定对象与列表是否相等。它重写Object类的equals()方法。
句法
boolean equals(Object o)

此方法接受要与列表进行相等性比较的对象。如果指定的对象等于列表, 则返回true, 否则返回false。

在下面的示例中, 我们创建了两个ArrayList firstList和secondList。通过使用equals()方法比较两个列表, 它返回true。我们在secondList中添加了另一个元素, 以在firstList和secondList之间创建差异。现在, 如果执行比较, 则返回false。
import java.util.*; public class ComapreArraylistExample1{public static void main(String args[]){//first array listArrayList< String> firstList=new ArrayList< String> (); //adds elements to the arraylistfirstList.add("Apple"); firstList.add("Pears"); firstList.add("Guava"); firstList.add("Mango"); System.out.println(firstList); //second array listList< String> secondList=new ArrayList< String> (); //adds elements to the arraylistsecondList.add("Apple"); secondList.add("Pears"); secondList.add("Guava"); secondList.add("Mango"); System.out.println(secondList); //comparing both listsboolean boolval = firstList.equals(secondList); //returns true because lists are equalSystem.out.println(boolval); //adding another element in the second listsecondList.add("Papaya"); //again comparing both listsboolean bool = firstList.equals(secondList); //returns false because lists are not equal System.out.println(bool); }}

输出量
[Apple, Pears, Guava, Mango][Apple, Pears, Guava, Mango]truefalse

Java removeAll()方法(查找缺少的元素)ArrayList类的Java removeAll()方法用于从列表中删除指定集合中包含的所有元素。它重写AbstractCollection < E> 类的removeAll()方法。
句法
public boolean removeAll(Collection< ?> c)

此方法接受Collection作为包含要从此列表中删除的元素的参数。如果此列表由于调用而更改, 则返回true。

在下面的示例中, 我们创建了两个ArrayList firstList和secondList。 removeAll()方法删除firstList的所有元素, 因为除了木瓜之外, secondList中也存在相同的元素。因此, 木瓜是firstList中缺少的元素。因此, 它返回木瓜。如果两个列表具有相同的元素, 则该方法返回一个空列表[]。
import java.util.*; public class ComapreArraylistExample2{public static void main(String args[]){//first arraylistArrayList< String> firstList=new ArrayList< String> (); //adds elements to the array listfirstList.add("Apple"); firstList.add("Pears"); firstList.add("Guava"); firstList.add("Peach"); //second array listArrayList< String> secondList=new ArrayList< String> (); //adds elements to the array listsecondList.add("Apple"); secondList.add("Pears"); secondList.add("Papaya"); secondList.add("Peach"); //removes all elements from the first list//returns empty list if all the elements of first list match with elements of second listsecondList.removeAll(firstList); //prints the element of second list which does not match with the element of the first listSystem.out.println(secondList); }}

输出量
[Papaya]

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

import java.util.*; public class ComapreArraylistExample3{public static void main(String args[]){//first array listArrayList< Integer> firstList=new ArrayList< Integer> (Arrays.asList(12, 4, 67, 90, 34)); System.out.println("First array list: "); System.out.println(firstList); //second array listList< Integer> secondList=new ArrayList< Integer> (Arrays.asList(12, 4, 67, 0, 34)); System.out.println("Second array list: "); System.out.println(secondList); //returns the common elements in both listfirstList.removeAll(secondList); System.out.println("Un-common element of the first list: "); System.out.println(firstList); }}

【如何在Java中比较两个ArrayList】输出量
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 keepAll()方法(返回两个列表中的公共元素)ArrayList类的Java keepAll()方法仅保留其他列表中包含的列表元素。它重写AbstarctCollection < E> 类的keepAll()方法。
句法
public boolean retainAll(Collection< ?> c)

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

在此示例中, 我们通过使用Arrays类的asList()方法创建了两个ArrayList firstList和secondList。 asList()方法返回指定数组的列表视图。
import java.util.*; public class ComapreArraylistExample4{public static void main(String args[]){//first arraylistArrayList< String> firstList=new ArrayList< String> (Arrays.asList("M", "W", "J", "K", "T")); System.out.println("First arraylist: "); System.out.println(firstList); //second arraylistList< String> secondList=new ArrayList< String> (Arrays.asList("M", "W", "E", "K", "T")); System.out.println("Second arraylist: "); System.out.println(secondList); //returns the common elements in both listsecondList.retainAll(firstList); System.out.println("Common elements in both list: "); System.out.println(secondList); }}

输出量
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()方法。
句法
public booleancontains(Object o)

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

在此示例中, 我们创建了两个String类型的ArrayList firstList和secondList。我们使用contains()方法比较了这些ArrayList。如果firstList的元素与secondList的元素匹配, 则返回Yes, 并将此值存储到thirdList。同样, 如果元素不匹配, 则返回No。
import java.util.ArrayList; import java.util.Arrays; public class ComapreArraylistExample5{public static void main(String [] args){//first arraylistArrayList< String> firstList= new ArrayList< String> (Arrays.asList("Good", "Morning", "Students")); //second arraylistArrayList< String> secondList= new ArrayList< String> (Arrays.asList("Good", "Night", "frineds")); //storing the comparison output in thirdListArrayList< String> thirdList= new ArrayList< String> (); //iterator using for-each loopfor(String tempList : firstList) //tempList isa variablethirdList.add(secondList.contains(tempList) ? "Yes" : "No"); System.out.println(thirdList); }}

输出量
[Yes, No, No]

Java contentEquals()方法Java contentEquals()方法将String与StringBuffer进行比较, 并返回一个布尔值。它属于String类。
句法
public boolean contentEquals(StringBuffer sb)

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

在此示例中, 我们创建了两个String类型的ArrayList firstList和secondList。我们创建了一个静态方法compareList(), 该方法将两个ArrayList ls1和ls2解析为一个参数, 并返回一个布尔值。该方法将列表转换为String。 contentEquals()方法将String与指定的StringBuffer进行比较。
我们在secondList中添加了另一个元素, 以创建两个列表之间的差异, 然后再次调用compareList()方法, 该方法返回false。
import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class ComapreArraylistExample6 {//defining methodpublic static boolean compareList(ArrayList ls1, ArrayList ls2){//converts List into String and checks string are equal or notreturn ls1.toString().contentEquals(ls2.toString())?true:false; }public static void main(String[] args) {ArrayList< String> firstList = new ArrayList< String> (Arrays.asList("Java", "Python", "Ruby", "Go")); ArrayList< String> secondList = new ArrayList< String> (Arrays.asList("Java", "Python", "Ruby", "Go")); System.out.println("When Lists are same: "+compareList(firstList, secondList)); //adding another element to the secondListsecondList.add("C++"); //output after adding different elementSystem.out.println("When Lists are not same: "+compareList(firstList, secondList)); }}

输出量
When Lists are same: trueWhen Lists are not same: false

Java Stream接口Java Stream是一个接口。它属于java.util包。它提供了filter()方法来根据给定元素过滤流元素。这是一个中间过程。
句法
Stream< T> filter(Predicate< ? Super T> predicate)

此方法接受Predicate(功能接口)作为参数, 并返回新的结果元素流。
collect()方法
在以下示例中使用的另一种方法是Stream接口的collect()方法。
它使用收集器对此流的元素执行可变的归约操作。收集器封装用作收集参数的函数(Supplier, BiConsumer, BiConsumer)。它允许重用收集策略和收集操作的组成。这是一个终端操作。
句法
< R, A> R collect(Collector< ? Super T, A, R> collector)

Collectors.toList()方法
toList()是Collectors类的静态方法。它属于java.util.Stream.Collectors类。
句法
public static < T> Collector< T, ?, List< T> > toList()

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

在下面的示例中, 我们创建了两个String类型的ArrayList firstList和secondList。 filter()方法返回两个列表中都存在的公共元素的列表。
import java.util.*; public class CompareArrayListExample7{ public static void main(String[] args) { ArrayList< String> firstList= new ArrayList< String> (Arrays.asList("Java", "Python", "Ruby", "Go")); System.out.println("First List: "+firstList); ArrayList< String> secondList = new ArrayList< String> (Arrays.asList("Java", "Python", "Ruby", "Go", "Perl")); System.out.println("Second List: "+secondList); // Finds common elements System.out.print("Common elements: " +firstList.stream().filter(secondList::contains).collect(Collectors.toList())); } }

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

    推荐阅读