Tom*_*and 39
我认为问题是相反的 -
什么时候应该在列表上使用数组?
只有你有特定的理由这样做(例如:项目限制,记忆关注(不是一个很好的理由),等等)
列表更容易使用(imo),并具有更多功能.
注意:您还应该考虑是否像Set或其他数据结构这样的东西比List更适合您要做的事情.
每个数据结构和实现都有不同的优点/缺点.挑选那些你需要做的事情.
如果你需要get()为任何项目的O(1)?可能使用ArrayList,需要O(1)insert()?可能是一个链接列表.需要O(1)包含()?可能是一个哈希集.
TLDR:每个数据结构都擅长某些东西,而其他东西则不好.查看您的目标并选择最适合给定问题的数据结构.
编辑:
有一点没有注意到,最好将变量声明为其接口(即List或Queue)而不是其实现类.这样,您可以在以后更改实现,而无需更改代码中的任何其他内容.
举个例子:
List<String> myList = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
VS
List<String> myList = new LinkedList<String>();
Run Code Online (Sandbox Code Playgroud)
请注意,myList在两个示例中都是List.- R. Bemrose
Tom*_*ine 16
经验法则:
List作为参考类型.Lists 对类型系统强制进行防御性复制可能很有用.List对序列执行了大量类型操作,并且它不在性能/内存关键部分中,那么请使用List.vdr*_*vdr 10
大多数人已经回答了.
几乎没有充分的理由使用数组而不是List.主要的例外是原始数组(如int[]).您无法创建基元列表(必须具有List<Integer>).
最重要的区别是,使用List时,您可以决定使用哪种实现.最明显的是选择LinkedList或ArrayList.
我想在这个答案中指出,选择实现可以让您对数据无法控制的数据进行非常精细的控制:
Collection.unmodifiableListCollection.synchronizedListLinkedBlockingQueue在任何情况下,即使您不希望(现在)列表的任何额外功能.只需使用ArrayList并使用您创建的数组大小调整它的大小.它将在后端使用一个Array,与真实阵列的性能差异可以忽略不计.(原始数组除外)
| 归档时间: |
|
| 查看次数: |
31063 次 |
| 最近记录: |