我正在使用带有 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/