Java:使用size()确定不同arrayList条目类型的数量

时间:2013-05-07 10:02:06

标签: java arraylist size

是否可以使用size()方法在arraylist中找到不同类型的条目?例如,我有一个有两种不同类型的arraylist(个人条目,商业条目)。

我有一个numberOfEntries方法:

data = new ArrayList<Entry>();

public int numberOfEntries() {
    return data.size();
  }

然而,这会计入总条目(个人和商业)。是否有一个更简单\更好的方法,而不是使用instanceOf并循环我不知道的数组?

4 个答案:

答案 0 :(得分:2)

根据您的使用情况和data的重要性,您可以编写一个存储Entry的小类。例如。在Map<Class<?>, List<Entry<?>>>

然后你可以简单地执行某事。比如MyObjectOfClass.getEntriesOfType(Personal.class).size()

答案 1 :(得分:1)

使用不同的集合类来分隔这两种类型(这里可能适合或不适合),没有。

你必须遍历数组并计算。内置的没有“神奇”。

你可以使用谷歌番石榴这样的库,但他们会在幕后做同样的事情。

答案 2 :(得分:1)

简而言之,没有。 ArrayList的size()方法仅返回List(http://docs.oracle.com/javase/6/docs/api/)中的元素数。

根据您打算做什么,您可能希望保留每种类型对象的数量(繁琐),或将它们存储在单独的列表中(计数隐含在列表大小中)。

考虑您需要使用计数数字的频率 - 是否适合每次计算或跟踪计数?如果程序是微不足道的话,不要太担心效率,因为它没有任何区别 - 首先关注正确的行为。

如果您决定为自己的目的派生一个新的数据结构,我会用一个只包含您可能需要的方法的类来包装底层结构,而不是扩展它 - 这更不容易出错并且会限制你必须覆盖的方法数量。

关于避免延伸的文章: http://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html

答案 3 :(得分:0)

据我所知,没有,但实现起来并不难,你可以定义一个继承自ArrayList的类,添加一个类型为

的属性
Map<Class,Integer>

收集数据,指出该数组中有多少指定类型的对象,然后覆盖add()方法,在插入对象之前添加统计代码

public boolean add(E e) {
    // add code here to the collect info
    return super.add(e)
}