-4

是否可以使用 size() 方法在数组列表中找到不同类型的条目?例如,我有一个具有 2 种不同类型(个人条目、业务条目)的数组列表。

我有一个 numberOfEntries 方法:

data = new ArrayList<Entry>();

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

但是,这会计算总条目(个人和企业)。有没有更简单\更好的方法,而不是使用 instanceOf 并在我不知道的数组周围循环?

4

4 回答 4

2

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

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

于 2013-05-07T10:11:14.287 回答
1

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

您必须遍历数组并计数。没有内置任何“魔法”。

你可以使用像 Google Guava 这样的库,但他们会在后台做同样的事情。

于 2013-05-07T10:05:18.407 回答
1

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

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

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

如果您决定为自己的目的派生一个新的数据结构,我会用一个仅实现您可能需要的方法的类来包装底层结构,而不是扩展它——这样更不容易出错,并且会限制您将不得不重写的方法。

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

于 2013-05-07T10:18:44.340 回答
0

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

Map<Class,Integer>

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

public boolean add(E e) {
    // add code here to the collect info
    return super.add(e)
} 
于 2013-05-07T10:12:37.977 回答