而不是交叉两个列表如何交叉两个以上?

cod*_*532 2 java arraylist

所以结构是{{Dog,Cat,Human},{Human,Dog,Whale,rabbit,Cow},{Monkey,Human,Dog}}.

输出应该是:Dog,Human.

我必须在较大的List中找到List元素的交集.以前,我已经看到了找到相互交叉的代码ArrayLists,但不知道我怎么能在同一个ArrayList(两个以上)内完成.

对于单独ArrayLists的代码,如下所示.但是如何让它更适合多个ArrayLists内部ArrayList?我在接受采访时被问到这个问题.为单独的列表工作,但不能用它来粉笔ArrayList.

面试官明确规定只与字符串的工作,所以我修改了泛型类型令牌从{<T>}{<String>}澄清之后.

public class Test {

    public <String> List<String> intersection(List<String> list1, List<String> list2) {
        List<String> list = new ArrayList<>();

        for (String t: list1) {
            if(list2.contains(t)) {
                list.add(t);
            }
        }

        return list;
    }
public static void main(String[] args) throws Exception {

        List<String> list1 = new ArrayList<String>(Arrays.asList("Dog", "Cat", "Human"));
        List<String> list2 = new ArrayList<String>(Arrays.asList("Human", "Dog", "Whale", "rabbit", "Cow"));

        System.out.println(new Test().intersection(list1, list2));

    }
}
Run Code Online (Sandbox Code Playgroud)

这会产生两个独立的正确输出ArrayLists.但是,如果稍微修改输入,例如,交集方法将返回a,a,a输入a,a,a,a,a,但它将a,a为输入a,aa,a,a.逻辑假设是它应该总是返回,a,a而不管参数的顺序如何.

关于如何解决这个问题的任何建议,无论输入顺序如何?我怎么能在一个更大的列表中找到几个列表(两个以上)的交集?

das*_*ght 6

交集是关联的,您可以实现两个列表的交集,然后将相同的算法重复应用于其余列表.

Java提供了一种通过retainAll操作进行交集的内置方法:

List<String> a = ...
List<String> b = ...
List<String> c = ...
List<String> intersection = new ArrayList<>(a);
intersection.retainAll(b);
intersection.retainAll(c);
Run Code Online (Sandbox Code Playgroud)