Android 适配器:使用 Linkedlist 与 Arraylist

bre*_*ine 4 performance android android-adapter android-recyclerview

我将 RecycleView 与 Gridlayoutmanager 一起使用。当用户向下滚动时,我的应用程序会加载很多项目。

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());
    }

}
Run Code Online (Sandbox Code Playgroud)

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

new PhotosAdapter(getContext(), new ArrayList<Photo>());
Run Code Online (Sandbox Code Playgroud)

或这个:

new PhotosAdapter(getContext(), new LinkedList<Photo>());
Run Code Online (Sandbox Code Playgroud)

当简单地添加新元素时:

adapter.addAll(myPhotos);
Run Code Online (Sandbox Code Playgroud)

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

Luk*_*itz 5

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

无论如何,ArrayList 在大多数情况下都会给你带来更好的性能。我建议将其用作默认值,并且仅当您想将数据插入列表中间时才使用链接列表。

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

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

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