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