何时使用Object []和List <object> </object>

时间:2010-02-09 14:19:28

标签: java

  

可能重复:
  When to use a List over an Array in Java?

正如标题所述,我试图找出何时使用某些类型的列表。我刚刚意识到我不知道这些Object [] - 列表是如何实现的,因此它们比List更受欢迎。也许只有当我知道列表的大小不会改变时,它们才是首选?我希望我的问题清楚。

干杯,

7 个答案:

答案 0 :(得分:6)

Effective Java, chapter 5

  

第25项:首选列表到数组

阅读第25项的解释。

此外,Object[]的大小已固定,List的大小可能会发生变化(效率取决于实施情况 - 如果是LinkedListArrayList等。)

答案 1 :(得分:4)

您几乎总是喜欢列表(或其他收藏集)。

阵列是不灵活的,固定实现的构建块,可用于实现集合。但在正常的应用程序代码中,直接使用它们很少有用。

例如,使用List,您可以轻松地在任何位置添加和删除对象,交换实现以满足您的需求,或者如果您的需求发生变化,甚至可以用List替换SortedSet。 / p>

一个很大的例外是缓冲区或原始数据的其他数组:对于从InputStream读取,您将使用byte[],绝对不是List<Byte>

答案 2 :(得分:2)

Object[]被称为数组 - 一种在大多数编程语言中都能找到的非常简单的基础数据结构。数组在Java语言规范和VM规范中得到特殊处理(例如它们自己的语法)。您需要了解的内容:

  • 数组具有固定大小
  • 它们比列表更快,内存效率更高(这在大多数程序中都不太重要)
  • 您可以拥有基本类型的数组,例如int,但不能列出 - 它可能看起来像是因为自动装箱,但它实际上是List<Integer>,它有更多的时间和内存开销
  • 您可以在一个语句中实例化多维数组,例如int[][] matrix = new int[100][100] - 比List<List<Integer>>方便得多,因为在那里,您还必须手动创建嵌套列表。

答案 3 :(得分:1)

Object[] 列表,它是一个数组。您无法调整数组大小,它在创建时具有固定大小。是否可以调整List的大小取决于具体实现,因为List只是一个接口。例如,ArrayListLinkedList可能会添加和删除元素,而Collections返回的某些列表是固定大小的。

答案 4 :(得分:0)

您已经自己给出了答案:如果您不希望更改大小,请使用数组。如果您有更多动态行为,请使用列表。

答案 5 :(得分:0)

数组是内存中的直接数组。列表可以用不同的方式构建(例如,在ArrayList的情况下使用数组)。

关于何时使用它们,列表更灵活,Collection框架为它们提供了非常有用的操作。

我建议你阅读Essential Java关于该主题的章节,它将在细节中输入比我更多的内容。

答案 6 :(得分:0)

Object[]不是列表,而是数组。

Java中的数组是在连续的内存块中分配的,因此索引它们(myArray[3])非常有效。它们也具有存储效率(不是很多开销)。

列表是不同的东西,实际上 没有List<Object>的实现;这是一个接口,一个处理列表的抽象方式。有LinkedList<Object>ArrayList<Object>等,它们是接口的实际实现,在各种操作之间有不同的权衡 - 索引到列表,遍历它,修改它等等 - 以及之间他们引入了多少存储开销。

当你不打算改变阵列中有多少元素时,数组很棒;当你需要改变有多少元素时,列表很棒。