containsAll用于列表中对象的nCopies

时间:2019-05-26 08:40:19

标签: java list collections contains

我想检查一个Arraylist是否包含相同元素的n个副本。 问题出在这里:

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

public class testMain {
    public static void main(String[] args) {
        myClass myObject = new myClass("haha1");

        ArrayList a = new ArrayList();
        a.add(myObject);
        a.add(new myClass("haha2"));
        a.add(new myClass("haha3"));

        List b;
        b = Collections.nCopies(5, myObject);
        System.out.println(a.containsAll(b)); //prints true
    }

    static private class myClass {
        String a;

        myClass(String a) {
            this.a = a;
        }
    }
}


问题1:列表b的大小大于列表a-应该为假
问题2:列表b有多个myObject对象(与列表a相反-应该为

由于containsAll的工作方式不起作用,因为我想查看列表{{1}中对象myObject是否包含(在这种情况下) 3次(在这种情况下) }。

我知道我可以编写自己的方法来实现我想要的功能,但是我想知道这种情况下是否有现成的解决方案,或者是最“优雅”的处理方式。 / p>

编辑:删除了我对a的使用的说明,因为它与给定的示例冲突。

1 个答案:

答案 0 :(得分:2)

使用Collections.frequency(a,myObject) == 5(或Collections.frequency(a,myObject) >= 5,如果您不介意CollectionmyObject上有5个以上实例)。

  

int java.util.Collections.frequency(Collection c,Object o)

     

返回指定集合中等于指定对象的元素数。更正式地,返回集合中元素e的数量,使得(o == null?e == null:o.equals(e))。