数组:相同类型的、用一个标识符封装到一起的基本数据类型序列或对象序列。在java中将数组看做是一个对象。
一维数组的创建及使用
创建一维数组的两种方式:
1. 先声明,在用new运算符进行内存分配;声明一维数组的两种方式如下:
A. 数组元素类型 数组名[];
B. 数组元素类型[] 数组名;
声明数组后,还不能立即访问它的任何元素,还需要为它分配内存空间,在为数组分配内存空间时,必须指明数组的长度;语法如下:
数组名 = new 数组元素的类型[数组元素的个数]; //使用new关键字为数组分配内存时,整型数组中各个元素的初始值都为0
2. 声明的同时为数组分配内存;如下:
数组元素的类型 数组名[] = new 数组元素的类型[数组元素的个数];
初始化一维数组的两种方式:
int arr[] = new int[]{2,4,6,8,10}; //创建有五个元素的数组
int arr2[] = {34,23,12,6}; //创建有四个元素的数组
二维数组的创建及使用
如果一维数组中的各个元素仍是数组,那么它就是一个二维数组。
创建二维数组的两种方式:
1. 先声明,在用new运算符进行内存分配;声明二维数组的两种方式如下:
A. int arr[][];
B. int [][] arr;
同一维数组一样,声明后需要为它分配内存空间;对用高维度数组,有两种分配方式:
A. 直接为每一维分配内存空间:
arr = new int[2][4]; //在二维数组arr中创建了两个长度为四的一维数组
B. 分别为每一维数组分配内存
arr[0] = new[2];
arr[1] = new[4];
2. 声明的同时为数组分配内存;如下:
int arr[] = new int[2][4];
初始化二维数组:
int arr2[][]= {{},{}}; //创建包含两个一维数组的二维数组
数组的基本操作
填充替换数组元素:
数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换
Arrays.fill(arr,8); //将数组arr中的元素全部替换成8
对数组进行排序:
Arrays.sort(arr); //将数组arr中的元素进行升序排序
复制数组:
复制数组至指定长度
copyOf(arr,int newArrLenght); //arr:复制的数组名 newArrLenght:复制后的新数组长度
将指定数组的指定长度复制到一个新数组
copyOfRange(arr,int formIndex,int toIndex); //arr:复制的数组名 formIndex:开始复制的数组元素索引(包含) toIndex:复制的结束索引(不包含)
数组查询:
使用二分搜索法来搜索指定数组
binarySearch(arr,Object key); //arr:要搜索的数组 key:要搜索的值 该方法返回搜索值的索引,没有则返回-1
数组排序算法
冒泡排序:对比相邻的元素,满足条件就交换位置;把较小的元素移到前面,大的移到后面
for(int i =1;i<arr.length;i++) {
for(int y = 0; y < arr.length-i;y++) {
if (arr[y]<arr[y+1]) {
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
直接选择排序:用指定元素和数组中所有元素对比,满足条件时就交换位置(指定元素排好之后就是最大(小)的)
for(int i = 1;i<arr.length;i++){
int index = 0;
for(int j = 1;j<=arr.length-i;j++) { //每次循环找出数组中最大数arr[index]
if (arr[j]>arr[index]) {
index = j;
}
}
int temp = arr[arr.length-i];
arr[arr.length-i] = arr[index];
arr[index] = temp;
}
}
反转排序:第一个元素与最后一个元素交换位置;第二个元素与倒数第二个元素交换位置;以此类推
int len = arr.length/2;
for(int i =0;i<len;i++) {
int temp = arr[i];
arr[i] = arr[arr.length-1-i];
arr[arr.length-1-i] = temp;
}