我有一个我要转换的ArrayList,这是我的代码:
ArrayList<PostWrapper> postWrapperList = listingWrapper.getData();
int size = postWrapperList.size();
ArrayList<Post> postList = new ArrayList<>(size);
for (int i = 0; i < size; i++) {
PostWrapper postWrapper = postWrapperList.get(i);
if (postWrapper.isKindLink()) {
Post post = postWrapper.getData();
postList.add(post);
}
}
postList.removeAll(Collections.singleton(null));
正如您在此代码中所看到的,我正在进行某种过滤,因此最终大小可能小于初始大小。目前我正在调用removeAll()来删除null对象以缩小ArrayList。
我的问题是哪种更有效,这种方式或只是创建没有任何初始大小的ArrayList然后让ArrayList类处理动态分配?
我关注的是解除分配创建列表时保留的多余容量。
答案 0 :(得分:2)
java.util.ArrayList中的代码
/**
* Trims the capacity of this <tt>ArrayList</tt> instance to be the
* list's current size. An application can use this operation to minimize
* the storage of an <tt>ArrayList</tt> instance.
*/
public void trimToSize() {
modCount++;
if (size < elementData.length) {
elementData = (size == 0)
? EMPTY_ELEMENTDATA
: Arrays.copyOf(elementData, size);
}
}
答案 1 :(得分:1)
如果我正确理解了这个问题,这段代码可能会对您使用Java 8的新流实用程序有所帮助:
List<Post> postList = postWrapperList.stream()
.filter(PostWrapper::isKindLink)
.map(PostWrapper::getData)
.collect(Collectors.toList());