Java - 初始化ArrayList,然后缩小大小

时间:2015-12-14 04:25:12

标签: java arraylist

我有一个我要转换的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类处理动态分配?
我关注的是解除分配创建列表时保留的多余容量。

2 个答案:

答案 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());