数组是相同类型的、用一个标识符封装在一起的基本类型数据序列或对象序列,是最为常见的数据结构。鸭哥今天想聊聊数组的声明和初始化,它在我们的工作中使用频率最高,但是很多相关知识,很多人却未必了解全貌。

数组变量的创建

Java 中提供了两种数组声明风格,

//首选的方法
dataType[] arrayVar;    //一维数组
dataType[][] arrayName;  //二维数组


或者

//非首选,来自C/C++语言风格
dataType arrayVar[];    //一维
dataType arrayName[][];    //二维

使用 new 创建数组,

arrayVar = new dataType[size];
arrayName = new dataType[length1][length2];

第一行的代码做了两件事:先是创建了dataType[size] 数组,然后将新创建数组对象的引用赋值给arrayVar,即引用变量 arrayVar 引用了这个数组。

数组的声明和创建可以一条龙完成,这也是我们平时最常用的写法,

dataType arrayVar = new dataType[size];

数组变量的初始化

一维数组和多维数组的初始化方式是类似的,

//一维数组
int arr[] = new int[]{1, 2, 3, 4, 5};    //第一种初始化方法
int arr2[] = {1, 2, 3, 4, 5};    //第二种

String[] myStringArray = new String[]{"a", "b", "c"};
String[] myStringArray = {"a", "b", "c"};
//二维数组
int myArr[][] = new int[][]{{1, 3}, {2, 4}};
int myArr[][] = {{1, 3}, {2, 4}};

对于多维数组,还可以从最高维开始,分别为每一维分配空间,

String s[][] = new String[2][];
//最高维分配引用空间
s[0] = new String[2];
s[1] = new String[3];

s[0][0] = new String("Do");
s[0][1] = new String("you");
s[1][0] = new String("love");
s[1][1] = new String("Java");
s[1][2] = new String("?");

数组常用的操作技巧

整数数组的快捷初始化方法

1、使用 fill() 方法将指定的 int 值分配给int型数组的每个元素。

int[] array = new int[3];

// 填充数组
Arrays.fill(array, 8);    //等价于array = {8, 8, 8}

2、使用 IntStream 进行初始化

int [] myIntArray = IntStream.range(0, 100).toArray(); //数组中的元素为0到99
int [] myIntArray = IntStream.rangeClosed(0, 100).toArray(); //数组中的元素为0到100

int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).toArray(); //数组元素的顺序与初始化的顺序相同,等价于 myIntArray = {12,25,36,85,28,96,47};

//数组元素从小到大排序
int [] myIntArray = IntStream.of(12,25,36,85,28,96,47).sorted().toArray(); 

数组的复制

Arrays 类的 copyOf() 方法和 copyOfRange() 方法可以实现进行数组的复制

//将arr数组复制给数组newArr,新数组的长度为 5
int[] arr = new int[]{12, 34, 45};
int[] newArr[] = Arrays.copyOf(arr, 5);

//将指定范围内的数组元素复制给新数组
int[] arr = new int[]{23, 34, 45, 46, 78};
int newArr[] = Arrays.copyOfRange(arr, 0, 3);   //不包括末尾索引对应的元素,新数组的元素为{23, 34, 45}

数组的排序和查找

Arrays 类的 sort() 方法可以对数组进行排序;查找数组元素可以通过 binarySearch() 方法,能对排序好的数组进行二分查找法操作

int arr[] = new int[]{4, 25, 10};
Arrays.sort(arr);

int index = Arrays.binarySearch(arr, 10);    //index = 2,元素在数组中,返回所在位置的索引
int index2 = Arrays.binarySearch(arr, 8);    //index1 = -2,数组中不存在查找元素,返回插入点索引的相反数

关于数组声明和初始化的内容就到这里,可能很多知识大家是知道的,但有了鸭哥的复盘,相信大家心中知识点的脉络和层次就更加清晰了。

在评论区聊聊你的思考吧~

标签: java, Java面试题, stackoverflow中文版, 数组声明, 数组初始化, Java数组