是否有理由更喜欢数组而不是数组列表?
可能重复:
阵列的好处
嘿,
有什么理由更喜欢吗?使用数组的唯一位置是基元数据类型(int、布尔值等)。但是我对此没有合理的解释,它只是使代码更薄一些。Arrays (MyObject[])
ArrayLists (List<MyObject>)
一般来说,我使用List是为了保持更好的灵活性。但是,是否有理由使用真正的数组呢?
我想知道,最好的问候
可能重复:
阵列的好处
嘿,
有什么理由更喜欢吗?使用数组的唯一位置是基元数据类型(int、布尔值等)。但是我对此没有合理的解释,它只是使代码更薄一些。Arrays (MyObject[])
ArrayLists (List<MyObject>)
一般来说,我使用List是为了保持更好的灵活性。但是,是否有理由使用真正的数组呢?
我想知道,最好的问候
每当我知道我只打算使用固定数量的元素时,我更喜欢使用s而不是s。我的理由大多是主观的,但无论如何,我在这里列出它们:Array
ArrayList
对基元使用类明显较慢,因为它们必须使用自动装箱和包装器。Collection
我更喜欢更直接的语法来访问元素而不是。当我需要多维数组时,这真的变得更加重要。[]
ArrayList
get()
ArrayList
s 通常会提前分配大约两倍于您现在需要的内存,以便您可以非常快速地追加项目。因此,如果您不打算再添加任何项目,就会浪费。
(可能与上一点有关)我认为访问速度比普通阵列慢。该实现使用底层数组,但所有访问都必须通过 、 、 等方法,这意味着它比简单的数组访问要经历更多的代码。但我实际上还没有测试过差异,所以我可能是错的。ArrayList
ArrayList
get()
set()
remove()
话虽如此,我认为选择实际上取决于你需要它做什么。如果你需要固定数量的元素,或者如果你要使用多个维度,我会建议一个普通的数组。但是,如果您需要一个简单的随机访问列表,并且要对其进行大量插入和删除,那么使用Arraylist
通常,数组有其问题,例如类型安全性:
Integer[] ints = new Integer[10];
Number[] nums = ints; //that shouldn't be allowed
nums[3] = Double.valueOf[3.14]; //Ouch!
他们也不太擅长收藏。因此,与数组相比,您应该更喜欢集合。只有几件事,数组可能更方便。正如你已经说过的那样,基元类型将是一个原因(尽管你可以考虑使用像Trove这样的类似集合的库)。如果数组隐藏在对象中并且不需要更改其大小,则可以使用数组,特别是如果您需要可以获得的所有性能(例如3D和4D矢量和矩阵用于3D图形)。使用数组的另一个原因可能是如果您的API有很多varargs方法。
顺便说一句:如果你需要匿名类的可变变量,那么使用数组有一个可爱的技巧:
public void f() {
final int[] a = new int[1];
new Thread(new Runnable() {
public void run() {
while(true) {
System.out.println(a[0]++);
}
}
}).start();
}
请注意,不能使用 int 变量执行此操作,因为它必须是 final。