安卓适配器 : using Linkedlist vs Arraylist

标签 android performance android-adapter android-recyclerview

我正在使用带有 Gridlayoutmanager 的 RecycleView。当用户向下滚动时,我的应用会加载很多项目。

LinkedList 在添加新元素时有很好的性能,而我的 ArrayList 需要不断调整大小。

但我不确定 RecycleView 在后台做了什么,哪个更适合 ArrayList 和/或 LinkedList。

我的适配器是:

public class PhotosAdapter extends RecyclerView.Adapter<PhotosAdapter.PhotosViewHolder> {

    private Context context;

    private List<Photo> items;

    public PhotosAdapter(Context context, List<Photo> items) {
        this.context = context;
        this.items = items;
    }

    //other code here

    public void addAll(List<Photo> newItems) {
        int beforeSize = items.size()-1;
        items.addAll(newItems);
        notifyItemRangeInserted(beforeSize, newItems.size());
    }

}

所以当我创建一个新的空适配器时,我可以这样做:

new PhotosAdapter(getContext(), new ArrayList<Photo>());

或者这个:

new PhotosAdapter(getContext(), new LinkedList<Photo>());

当简单地添加新元素时:

adapter.addAll(myPhotos);

那么在这种情况下 LinkedList 会更好吗? RecycleView 的优化滚动怎么样?使用 ArrayList 或 LinkedList 效果更好吗?

最佳答案

现在第一个问题应该是您是否过早优化?这是您应用的关键部分吗?您是否遇到性能问题?

无论如何,ArrayLists 在大多数情况下都会给你更好的性能。我建议默认使用它,如果你想将数据插入列表的中间,只使用链表。

是的,ArrayLists 在变得太大时需要调整数组的大小,但在大多数情况下,这不会抵消您获得的优势。

请记住,使用 LinkedList 时 get(int index) 的复杂度为 O(n),而使用 ArrayList 时的复杂度为 O(1)。如果您真的担心经常添加大量元素,您可以为 ArrayList 提供较大的初始容量,这样它就不必经常调整大小。

如果您有兴趣,请查看 Bjarne Stroustrup 的这篇演讲。 https://www.youtube.com/watch?v=YQs6IC-vgmo

关于安卓适配器 : using Linkedlist vs Arraylist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35391705/

相关文章:

android - RecyclerView - 如何在滚动过程中突出显示中央可见项

android - fragment 中的回收 View 的 "RecyclerView: No Adapter attached; skipping layout"

java - 如何将非英语单词作为文本部分添加到volley库中的多部分请求中?

java - 当用户单击后退时,有什么方法可以在 fragment 中调用 saveNote() 吗?

algorithm - 用于存储大量对象的高性能容器

linux - 内存保护键 内存重新排序

android - 使用 FragmentStatePagerAdapter 从 ViewPager 中动态删除一个项目

java - Java启动大量定时器对系统有什么影响?

安卓市场应用版本分布

ruby-on-rails - Rail 的 default_scope 对性能的影响