是否可以使用 size() 方法在数组列表中找到不同类型的条目?例如,我有一个具有 2 种不同类型(个人条目、业务条目)的数组列表。
我有一个 numberOfEntries 方法:
data = new ArrayList<Entry>();
public int numberOfEntries() {
return data.size();
}
但是,这会计算总条目(个人和企业)。有没有更简单\更好的方法,而不是使用 instanceOf 并在我不知道的数组周围循环?
根据您的用法和重要性,您可以编写一个存储sdata的小类。Entry例如在一个Map<Class<?>, List<Entry<?>>>.
然后你可以简单地执行某事。喜欢MyObjectOfClass.getEntriesOfType(Personal.class).size()。
没有使用不同的集合类来分隔这两种类型(在这里可能合适也可能不合适),不。
您必须遍历数组并计数。没有内置任何“魔法”。
你可以使用像 Google Guava 这样的库,但他们会在后台做同样的事情。
简而言之,没有。ArrayList 的 size() 方法仅返回 List ( http://docs.oracle.com/javase/6/docs/api/ ) 中元素的数量。
根据您打算做什么,您可能希望保留每种类型对象的数量(繁琐),或者将它们存储在单独的列表中(计数隐含在列表大小中)。
考虑您需要使用计数数字的频率 - 是否适合每次计数或跟踪计数?如果程序是微不足道的,不要太担心效率,因为它没有任何区别——首先关注正确的行为。
如果您决定为自己的目的派生一个新的数据结构,我会用一个仅实现您可能需要的方法的类来包装底层结构,而不是扩展它——这样更不容易出错,并且会限制您将不得不重写的方法。
关于避免扩展的文章: http ://www.javaworld.com/javaworld/jw-08-2003/jw-0801-toolbox.html
据我所知,没有,但实现起来并不难,可以定义一个继承自ArrayList的类,添加一个类型的属性
Map<Class,Integer>
它收集该数组中有多少指定类型的对象的数据,然后覆盖add()方法,在插入对象之前添加统计代码
public boolean add(E e) {
// add code here to the collect info
return super.add(e)
}