如何在Java中声明和初始化数组?


当前回答

使用局部变量类型推断,您只需指定一次类型:

var values = new int[] { 1, 2, 3 };

Or

int[] values = { 1, 2, 3 }

其他回答

您可以使用数组声明或数组文字(但仅当您立即声明并影响变量时,数组文字不能用于重新分配数组)。

对于基本类型:

int[] myIntArray = new int[3]; // each element of the array is initialised to 0
int[] myIntArray = {1, 2, 3};
int[] myIntArray = new int[]{1, 2, 3};

// Since Java 8. Doc of IntStream: https://docs.oracle.com/javase/8/docs/api/java/util/stream/IntStream.html

int [] myIntArray = IntStream.range(0, 100).toArray(); // From 0 to 99
int [] myIntArray = IntStream.rangeClosed(0, 100).toArray(); // From 0 to 100
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).toArray(); // The order is preserved.
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).sorted().toArray(); // Sort 

对于类,例如String,它是相同的:

String[] myStringArray = new String[3]; // each element is initialised to null
String[] myStringArray = {"a", "b", "c"};
String[] myStringArray = new String[]{"a", "b", "c"};

当您首先声明一个数组,然后初始化它,将一个数组作为函数参数传递,或者返回一个数组时,第三种初始化方法非常有用。需要显式类型。

String[] myStringArray;
myStringArray = new String[]{"a", "b", "c"};

或者,

// Either method works
String arrayName[] = new String[10];
String[] arrayName = new String[10];

它声明了一个名为arrayName的数组,大小为10(您可以使用元素0到9)。

在Java8中,您可以使用类似的功能。

String[] strs = IntStream.range(0, 15)  // 15 is the size
    .mapToObj(i -> Integer.toString(i))
    .toArray(String[]::new);

制作阵列有两种主要方法:

对于空数组:

int[] array = new int[n]; // "n" being the number of spaces to allocate in the array

对于一个初始化的数组:

int[] array = {1,2,3,4 ...};

您还可以创建多维数组,如下所示:

int[][] array2d = new int[x][y]; // "x" and "y" specify the dimensions
int[][] array2d = { {1,2,3 ...}, {4,5,6 ...} ...};

要创建类对象的数组,可以使用java.util.ArrayList.来定义数组:

public ArrayList<ClassName> arrayName;
arrayName = new ArrayList<ClassName>();

为数组赋值:

arrayName.add(new ClassName(class parameters go here);

从阵列中读取:

ClassName variableName = arrayName.get(index);

注:

variableName是对数组的引用,这意味着操纵variableName将操纵arrayName

对于循环:

//repeats for every value in the array
for (ClassName variableName : arrayName){
}
//Note that using this for loop prevents you from editing arrayName

for循环,允许您编辑arrayName(常规for循环):

for (int i = 0; i < arrayName.size(); i++){
    //manipulate array here
}