组合ArrayList没有重复

Uko*_*koM 5 java arraylist

import java.util.ArrayList;
import java.util.Collections;

public class SmartCombining {
    public static void main(String[] args) {
        ArrayList<Integer> list1 = new ArrayList<Integer>();
        ArrayList<Integer> list2 = new ArrayList<Integer>();

        Collections.addAll(list1, 4, 3);
        Collections.addAll(list2, 5, 10, 4, 3, 7);

        smartCombine(list1, list2);
        System.out.println(list1);
        System.out.println(list2);
    }

    public static void smartCombine(ArrayList<Integer> first,
            ArrayList<Integer> second) {
        first.addAll(second);
    }    
}
Run Code Online (Sandbox Code Playgroud)

所以,我想将两个列表合并为一个,但如果第二个列表包含第一个列表,则不会添加.到目前为止,我的方法将它们加在一起.

nem*_*035 7

好吧,一种方法是遍历第二个列表,同时检查每个元素是否存在于第一个列表中。如果没有,请添加它。

public static void smartCombine(ArrayList<Integer> first, ArrayList<Integer> second) {
     for(Integer num : second) {      // iterate through the second list
         if(!first.contains(num)) {   // if first list doesn't contain current element
             first.add(num);          // add it to the first list
         }
     }
}  
Run Code Online (Sandbox Code Playgroud)

另一种方法是将您的值保存在一个HashSet不允许任何重复的集合(如)中。然后你可以像这样组合它们:

first.addAll(second);
Run Code Online (Sandbox Code Playgroud)

另一种方法是首先从第二个列表中存在的第一个列表中删除所有元素(将被复制的元素)。然后将第二个列表的所有元素添加到第一个列表中。

public static void smartCombine(ArrayList<Integer> first, ArrayList<Integer> second) {
    first.removeAll(second); // remove elements that would be duplicated
    first.addAll(second);    // add elements from second list
}   
Run Code Online (Sandbox Code Playgroud)