【发布时间】:2015-09-09 08:39:27
【问题描述】:
我必须对一个大列表(超过 10,000 个元素)进行排序。添加元素时,我必须将其插入正确的位置。我看到ArrayList 将移动插入点之后的所有元素。
List 接口的所有不同实现在这种情况下如何表现?选择一种实现方式而不是另一种实现方式的优缺点是什么?
【问题讨论】:
标签: java data-structures
我必须对一个大列表(超过 10,000 个元素)进行排序。添加元素时,我必须将其插入正确的位置。我看到ArrayList 将移动插入点之后的所有元素。
List 接口的所有不同实现在这种情况下如何表现?选择一种实现方式而不是另一种实现方式的优缺点是什么?
【问题讨论】:
标签: java data-structures
List 的两个主要实现是ArrayList 和LinkedList。还有其他的,但它们通常用于特殊情况。
ArrayList 可以通过索引快速访问,因为它由数组支持 - 您只需要 array[i] - 但修改列表需要移动大部分底层数组,因此效率不高。
您可以使用LinkedList 非常有效地添加/删除项目,但查找nth 条目很慢,因为它必须从头部开始并遍历列表计数节点,直到到达所需位置。
【讨论】:
可能重复,但我会给你一个提示。
要对数据进行排序,您可以使用:
Collections.sort(List list);
方法,它无论如何都会将 List 转换为 Array,所以你不必太关心 List 实现的类型。它所需要的只是在您的对象中实现的接口 Comparable。
【讨论】:
您的数据可以包含重复项吗?
如果否,您可以使用TreeSet<?>
如果是,您可以使用TreeMap<?, Integer>,其中整数是每个项目的计数
【讨论】: