我能想到的唯一原因是,普通数组使用的内存较少(尽管这可能可以忽略不计),并且可以存储基本类型。即便如此,您仍然可以使用包装类。
常规数组在一开始使用的内存量较少,因为它们创建时大小正好符合需求,而ArrayList可能会浪费多达一半的容量,如果ArrayList足够大,则这不可忽略。
此外,访问数组中的元素更快,因为不需要调用get()等方法:这是直接的内存访问。
最后但并非最不重要的是,数组是以确切的正确类型创建的(甚至是原始类型,这些类型无法直接存储到ArrayList中),而ArrayList始终是Object[],对于提取每个元素所需的额外强制转换将导致性能损失。
array[index]
调用相比,这是很麻烦的。 - Óscar LópezList<List<List<String>>> stringCube = new ArrayList<List<List<String>>>;
// all the initialization
当你可以做到
String[][][] stringCube = new String[2][2][2];
String[][][] stringCube = {{{"000"},{"001"}},
{{"010"},{"011"}},
{{"100"},{"101"}},
{{"110"},{"111"}}};
速度。创建对象和方法调用是昂贵的。如果你真的需要优化(例如游戏),原始数据结构可以帮助。
这里有一个小程序来说明速度差异。在我的系统上,用100万个int填充原始数组大约需要5毫秒。填充对象列表大约需要150毫秒。
static int SIZE = 1000000;
public static void main(String[] args)
{
long t0 = System.currentTimeMillis();
int[] myInts = new int[SIZE];
for (int i = 0; i < SIZE; i++ )
{
myInts[i] = i;
}
long t1 = System.currentTimeMillis();
List<Integer> myList = new ArrayList<Integer>();
for (int i = 0; i < SIZE; i++ )
{
myList.add( i );
}
long t2 = System.currentTimeMillis();
System.out.println( "primitive array time: " + (t1-t0) );
System.out.println( "object list time: " + (t2-t1) );
}
ArrayList.get(someDouble)
时,它不会起作用,除非你将其包装起来,因为它是一个对象。 - Coffee Maker