📜  在Java中查找两个 ArrayList 中的共同元素

📅  最后修改于: 2022-05-13 01:55:28.874000             🧑  作者: Mango

在Java中查找两个 ArrayList 中的共同元素


先决条件: Java中的 ArrayList

给定两个 ArrayList,任务是在Java中打印两个 ArrayList 中的所有公共元素。

例子:

Input: List1 = ["Hii", "Geeks", "for", "Geeks"], 
       List2 = ["Hii", "Geeks", "Gaurav"]
Output: [Hii, Geeks, Geeks]

Input: List1 = ["a", "b", "c", "d", "e", "f"], 
       List2 = ["b", "d", "e", "h", "g", "c"]
Output:[b, c, d, e]
  1. 使用 Collections.retainAll() 方法

    句法:

    Collections1.retainAll(Collections2)
    
    This method keeps only the common elements
    of both Collection in Collection1.
    

    方法:

    1. 获取两个 ArrayList。
    2. 使用 Collection.retainAll() 方法在两个列表中查找公共元素。此方法仅将两个 Collection 的公共元素保留在 Collection1 中。
    3. List 1 现在只包含公共元素。

    下面是上述方法的实现:
    程序:通过修改List1的内容。

    // Java Program to find common elements
    // in two ArrayLists
    // Using retainAll() method
      
    // import ArrayList package
    import java.util.ArrayList;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList
                list1 = new ArrayList();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList
                list2 = new ArrayList();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Find the common elements
            list1.retainAll(list2);
      
            // print list 1
            System.out.println("Common elements: "
                               + list1);
        }
    }
    
    输出:
    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    

    方案2:通过保留List1的内容。

    // Java Program to find common elements
    // in two ArrayLists
    // Using retainAll() method
      
    // import ArrayList package
    import java.util.ArrayList;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList
                list1 = new ArrayList();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList
                list2 = new ArrayList();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Create ArrayList list3
            ArrayList
                list3 = new ArrayList(list1);
      
            // Store the comparison output
            // in ArrayList list3
            list3.retainAll(list2);
      
            // print list 3
            System.out.println("Common elements: "
                               + list3);
        }
    }
    
    输出:
    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    
  2. 使用流过滤器

    句法:

    list1.stream()
        .filter(list2::contains)
        .collect(Collectors
        .toList()));
    
    This method returns element if found in second list.
    

    方法:

    1. 首先创建两个 ArrayList 并添加列表的值。
    2. 使用 stream() 方法将 ArrayList 转换为 Stream。
    3. 使用 contains() 方法将过滤条件设置为不同。
    4. 使用 collect() 方法将过滤后的值收集为列表。该列表将返回两个列表中的公共元素。
    5. 打印清单3

    下面是上述方法的实现:

    程序:

    // Java Program to find common elements
    // in two ArrayLists
    // Using  Stream filter method
      
    // import ArrayList package
    import java.util.*;
    import java.util.stream.*;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList
                list1 = new ArrayList();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList
                list2 = new ArrayList();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Find common elements
            System.out.print("Common elements: ");
            System.out.println(list1.stream()
                                   .filter(list2::contains)
                                   .collect(Collectors
                                                .toList()));
        }
    }
    
    输出:
    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]
    
  3. 天真的方法:
    1. 首先创建两个 ArrayList 并添加列表的值。
    2. 创建一个临时 ArrayList 以包含公共元素。
    3. 遍历 list1 并使用 ArrayList.contains() 方法检查该元素是否存在于 list2 中。
    4. 如果找到,将其添加到列表 3
    5. 打印 list3 中的公共元素

    下面是上述方法的实现:

    // Java Program to find common elements
    // in two ArrayLists
    // Using  Stream filter method
      
    // import ArrayList package
    import java.util.ArrayList;
      
    public class GFG {
      
        // main method
        public static void main(String[] args)
        {
      
            // create ArrayList list1
            ArrayList
                list1 = new ArrayList();
      
            // Add values in ArrayList
            list1.add("Hii");
            list1.add("Geeks");
            list1.add("for");
            list1.add("Geeks");
      
            // print list 1
            System.out.println("List1: "
                               + list1);
      
            // Create ArrayList list2
            ArrayList
                list2 = new ArrayList();
      
            // Add values in ArrayList
            list2.add("Hii");
            list2.add("Geeks");
            list2.add("Gaurav");
      
            // print list 2
            System.out.println("List2: "
                               + list2);
      
            // Create ArrayList list3
            ArrayList
                list3 = new ArrayList();
      
            // Find common elements
            // while iterating through list1
            for (String temp : list1) {
      
                // Check if theis element is
                // present in list2 or not
                if (list2.contains(temp)) {
      
                    // Since present, add it to list3
                    list3.add(temp);
                }
            }
      
            // print common elements from list 3
            System.out.println("Common elements: "
                               + list3);
        }
    }
    
    输出:
    List1: [Hii, Geeks, for, Geeks]
    List2: [Hii, Geeks, Gaurav]
    Common elements: [Hii, Geeks, Geeks]