Java 如何计算arraylist中特定类的实例数?
我有一个数组列表,如下所示:Java 如何计算arraylist中特定类的实例数?,java,java-7,Java,Java 7,我有一个数组列表,如下所示: [new Class1(), new Class2(), new Class1(), new Class1()] 我想知道提取数组列表中Class1实例数的最有效方法 对于上面的例子,我想要答案3 我使用的是Java版本“1.7.0_79”。您可以迭代ArrayList并使用instanceof操作符进行检查 for (Object e : lst) { if (e instanceof Car) { carCount++; } } 您需要使
[new Class1(), new Class2(), new Class1(), new Class1()]
我想知道提取数组列表中Class1实例数的最有效方法
对于上面的例子,我想要答案3
我使用的是Java版本“1.7.0_79”。您可以迭代ArrayList并使用
instanceof
操作符进行检查
for (Object e : lst)
{
if (e instanceof Car)
{
carCount++;
}
}
您需要使用关键字
instanceof
例子:
publicstaticvoidmain(字符串[]args){
编号[]myN=新编号[5];
//填充…如果需要,请忽略此项
对于(int i=0;i
如果arraylist如下所示
newClass1 = new Class1();
[newClass1, new Class2(), newClass1, newClass1]
Collections.frequency(arrayList, newClass1);
@Override
public boolean equals(Object o){
if(!(o instanceof Class1 )){
return false;
}else{
return true;
}
}
然后你可以像下面这样检查频率
newClass1 = new Class1();
[newClass1, new Class2(), newClass1, newClass1]
Collections.frequency(arrayList, newClass1);
@Override
public boolean equals(Object o){
if(!(o instanceof Class1 )){
return false;
}else{
return true;
}
}
如果您总是添加Class1的新实例,那么下面就是解决方案
[new Class1(), new Class2(), new Class1(), new Class1()]
重写类1中的等于方法,如下所示
newClass1 = new Class1();
[newClass1, new Class2(), newClass1, newClass1]
Collections.frequency(arrayList, newClass1);
@Override
public boolean equals(Object o){
if(!(o instanceof Class1 )){
return false;
}else{
return true;
}
}
然后在你的测试课上
System.out.println(Collections.frequency(array, new Class1()));
嗯,你可以很容易地通过
result = Iterables.filter(collection, YourClass.java);
然后你可以在结果上应用
.size()
。谢谢你的答案-希望有更聪明或更有效的答案,但你的答案非常值得欣赏,没有比这更有效的方法了,除非你在创建列表时保持连续计数。顺便说一句,instanceof
对于扩展Car
的类的对象以及Car
本身将是true
。如果这不是您想要的,那么将其设置为If(e.getClass()==Car.class)
@danday74:保持计数可能只是不必要的复杂性(阅读:错误来源,维护成本增加)。你的名单有多大?数东西要花多长时间?收集。频率不会比你我写的效率高。事实上,它必须调用equals
方法,这肯定比instanceof
操作慢。不客气!请检查我编辑的答案,我为您的新Class1实例arraylist找到了解决方案。您应该在所有Class1、Class2中重写equals()方法。。。类重写equals
以使类的所有实例相等似乎是一个非常糟糕的主意。如果你想找到类1的实例,那么只在类中重写equals接受这个答案-这个答案和投票最高的答案都有效,但这个答案非常新颖,解释得很好-非常感谢所有-PS 2在这个回答中详细介绍的方法是有效的,但是我在使用单例的场景中使用单例实现了[newClass1,newclass2(),newClass1,newClass1]。谢谢