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]。谢谢