Skip to content

数组

数组的特点

  1. 数组是相同数据类型的元素的集合。
  2. 数组中的各元素是有先后顺序的。它们在内存中按照这个顺序连续存放在一起。
  3. 每个数组元素用整个数组的名字和它自己在数组中的位置表达(此位置被叫做下标)。

Java中的数组是对象,因此属于引用类型,数组对象需要使用new关键字来创建。

数组的声明

java
// 声明数组
int[] a = new int[10];
int a[] = new int[10];
// 在声明数组的同时进行初始化
int[] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
// 匿名数组
new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

数组的使用

数组的引用

所有的数组都有一个属性length,这个属性存储了数组元素的个数。

java
a.length

数组下标越界

Java系统能自动检查是否有数组下标越界的情况

如果在程序中使用intArray[10],就会发生数组下标越界,此时Java系统会自动终止当前的流程,并产生一个名为ArrayIndexOutOfBoundsException的异常,通知使用者出现了数组下标越界。

避免越界发生的有效方法是利用length属性作为数组下标的上界。

不定长参数

不定长参数是Java 1.5引入的一个新特性,允许方法接受可变数量的参数。

java
public void print(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

多维数组

多维数组是数组中的数组,即数组的数组。

java
int[][] a = new int[3][4];
int[][] array = new int[][]{{1,2,3},{4,5,6}};

util.Arrays

方法描述示例
Arrays.copyOf(array, length)拷贝数组int [] newArray = Arrays.copyOf(array, length)
Arrays.sort(array)排序数组Arrays.sort(array)
Arrays.toString(array)将数组转换为字符串String str = Arrays.toString(array)
Arrays.asList(array)将数组转换为列表List<Integer> list = Arrays.asList(array); ArrayList<Integer> arrayList = new ArrayList<>(list);

util.ArrayList

java
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);

数组转列表

java
ArrayList<Integer> arrayList = new ArrayList<>(Arrays.asList(array));

列表转数组

java
int[] array = arrayList.stream().mapToInt(i -> i).toArray();

for / for-each

for

java

for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

for-each

java
for (int x : array) {
    System.out.println(x);
}

stream

方法描述示例
forEach遍历数组Arrays.stream(array).forEach(System.out::println); <=> Arrays.asList(array).forEach(System.out::println);
map映射数组Arrays.stream(array).map(i -> i * 2).toArray();
filter过滤数组Arrays.stream(array).filter(i -> i % 2 == 0).toArray();
reduce归约数组Arrays.stream(array).reduce((a, b) -> a + b).get();
collect收集数组Arrays.stream(array).collect(Collectors.toList());