在Java中,什么时候优先使用List而不是数组?
答案 0 :(得分:16)
经验法则:
List
作为参考类型。List
s对类型系统强制进行防御性复制可能很有用。List
类型操作,但它不在性能/内存关键部分中,请使用List
。答案 1 :(得分:10)
大多数人已经回答了它。
几乎没有充分的理由使用数组而不是List。主要的例外是原始数组(如int[]
)。您无法创建基元列表(必须具有List<Integer>
)。
最重要的区别是,当使用List时,您可以决定将使用哪种实现。最明显的是选择LinkedList或ArrayList。
我想在这个答案中指出,选择实现可以对数据无法控制的数据进行非常精细的控制:
Collection.unmodifiableList
Collection.synchronizedList
LinkedBlockingQueue
在任何情况下,即使您不希望(现在)列表的任何额外功能。只需使用ArrayList并使用您创建的数组大小调整它的大小。它将在后端使用一个Array,与真实阵列的性能差异可以忽略不计。 (原始数组除外)
答案 2 :(得分:7)
几乎总是喜欢列表。列表具有更多功能,尤其是迭代器支持。您可以使用toArray()方法随时将列表转换为数组。
答案 3 :(得分:4)
总是喜欢列表。
时的数组
答案 4 :(得分:2)
如果你知道你将持有多少东西,你会想要一个阵列。我的屏幕是1024x768,并且在运行时期间,像素缓冲区的大小永远不会改变。
如果您知道需要访问特定索引(请参阅项目#763!),请使用数组或数组支持列表。
如果您需要定期添加或删除群组中的项目,请使用链接列表。
一般来说,处理硬件,数组,处理用户,列表。
答案 5 :(得分:1)
这取决于列表的类型。
如果您知道要在除结尾之外的位置插入许多元素,最好使用LinkedList。 LinkedList不适合随机访问(获取第i个元素)。
如果您事先不知道将会有多少元素,最好使用ArrayList。当您向其添加更多元素时,ArrayList会正确分摊增长支持数组的成本,并且适用于元素到位后的随机访问。可以有效地对ArrayList进行排序。
答案 6 :(得分:0)
如果您希望扩展项目数组(即,如果您事先不知道列表的大小),则列表将是有益的。但是,如果您想要性能,通常会使用数组。
答案 7 :(得分:0)
在许多情况下,使用的集合类型是一个不应暴露给外界的实现细节。您的返回类型越通用,您之后就可以更灵活地更改实现。
数组(原始类型,即new int [10])不是通用的,如果没有内部转换或更改客户端代码,您将无法更改实现。您可能希望将Iterable视为返回类型。