个性化阅读
专注于IT技术分析

如何在Java中比较两个ArrayList

点击下载

本文概述

有以下几种方法可以比较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 list
ArrayList<String> firstList=new ArrayList<String>();
//adds elements to the arraylist
firstList.add("Apple");
firstList.add("Pears");
firstList.add("Guava");
firstList.add("Mango");
System.out.println(firstList);
//second array list    
List<String> secondList=new ArrayList<String>();
//adds elements to the arraylist
secondList.add("Apple");
secondList.add("Pears");
secondList.add("Guava");
secondList.add("Mango");
System.out.println(secondList);
//comparing both lists
boolean boolval = firstList.equals(secondList); //returns true because lists are equal
System.out.println(boolval);
//adding another element in the second list
secondList.add("Papaya");
//again comparing both lists
boolean bool = firstList.equals(secondList); //returns false because lists are not equal 
System.out.println(bool);
}
}

输出量

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

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 arraylist
ArrayList<String> firstList=new ArrayList<String>();
//adds elements to the array list
firstList.add("Apple");
firstList.add("Pears");
firstList.add("Guava");
firstList.add("Peach");
//second array list    
ArrayList<String> secondList=new ArrayList<String>();
//adds elements to the array list
secondList.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 list
secondList.removeAll(firstList);
//prints the element of second list which does not match with the element of the first list
System.out.println(secondList);
}
}

输出量

[Papaya]

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

import java.util.*;
public class ComapreArraylistExample3
{
public static void main(String args[])
{
//first array list
ArrayList<Integer> firstList=new ArrayList<Integer>(Arrays.asList(12, 4, 67, 90, 34));
System.out.println("First array list: ");
System.out.println(firstList);
//second array list    
List<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 list
firstList.removeAll(secondList); 
System.out.println("Un-common element of the first list: ");
System.out.println(firstList);
}
}

输出量

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 arraylist
ArrayList<String> firstList=new ArrayList<String>(Arrays.asList("M", "W", "J", "K", "T"));
System.out.println("First arraylist: ");
System.out.println(firstList);
//second arraylist    
List<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 list
secondList.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 boolean  contains(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 arraylist
ArrayList<String> firstList= new ArrayList<String>(Arrays.asList("Good", "Morning", "Students"));
//second arraylist
ArrayList<String> secondList= new ArrayList<String>(Arrays.asList("Good", "Night", "frineds"));
//storing the comparison output in thirdList
ArrayList<String> thirdList= new ArrayList<String>();
//iterator using for-each loop
for(String tempList : firstList)	//tempList is  a variable
thirdList.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 method
public static boolean compareList(ArrayList ls1, ArrayList ls2)
{
//converts List into String and checks string are equal or not
return 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 secondList
secondList.add("C++");
//output after adding different element
System.out.println("When Lists are not same: "+compareList(firstList, secondList));
}
}

输出量

When Lists are same: true
When 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]

赞(0)
未经允许不得转载:srcmini » 如何在Java中比较两个ArrayList

评论 抢沙发

评论前必须登录!