我想检查一个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
的使用的说明,因为它与给定的示例冲突。
答案 0 :(得分:2)
使用Collections.frequency(a,myObject) == 5
(或Collections.frequency(a,myObject) >= 5
,如果您不介意Collection
在myObject
上有5个以上实例)。
int java.util.Collections.frequency(Collection c,Object o)
返回指定集合中等于指定对象的元素数。更正式地,返回集合中元素e的数量,使得(o == null?e == null:o.equals(e))。