数组是最多见的一种数据结构,它是相同类型的用一个标识符封装到一块儿的基本类型数据序列或者对象序列。数组使用一个统一的数组名和不一样的下标来惟一肯定数组中的元素。实质上,数组是一个简单的线性序列,所以访问速度很快java
一组相同类型数据的线性集合,一旦声明了数组的大小,就不能再修改。算法
数据类型[] 数组名; 数据类型既能够是基本数据类型,也能够是引用数据类型数组
String[] name; Person[] persons;
分配空间就是要告诉计算机在内存中为它分配几个连续的位置来存储数据。在 Java 中能够使用 new 关键字来给数组分配空间数据结构
name =new String[10]; persons =new Person[30];
int arr=new int[5];
数组能够进行初始化操做,在初始化数组的同时,能够指定数组的大小,也能够分别初始化数组中的每个元素ui
int[] number=new int[5]; number[0]=1; number[1]=2; number[2]=3; number[3]=5; number[4]=8; //或 int[] number=new int[]{1, 2, 3, 4, 5}; //或 int[] number={1,2,3,5,8};
指定元素所在数组的下标获取3d
int[] number={1,2,3,4,5}; System.out.println(number[0]);//输出1
利用 for 循环语句遍历 number 数组中的所有元素code
int[] number={1,2,3,4,5}; for (int i=0;i<number.length;i++) { System.out.println(number[i]);//依次输出1,2,3,4,5 }
以第一个下标表示元素所在的行,第二个下标表示元素所在的列,二维数组被看做数组的数组对象
type 表示二维数组的类型,array 表示数组名称,第一个中括号表示行,第二个中括号表示列blog
type[][] array;//例:int[][] age;
array=new type[][]{值 1,值 2,值 3,…,值 n}; array=new type[][]{new 构造方法(参数列),…}; type[][] array={{第1行第1列的值,第1行第2列的值,…},{第2行第1列的值,第2行第2列的值,…},…};
一个二行二列的二维数组 temp,并对数组中的元素进行了初始化排序
//方式一 int[][] temp; temp =new int[][] { {1,2},{3,4} }; //方式二 int[][] temp; temp=new int [][] { {new int(1),new int(2)},{new int(3),new int(4)} }; //方式三 int[][] temp={{1,2},{3,4}};
使用下标来获取
array[i][j]; int[][] temp={{1,2},{3,4},{5,6}}; System.out.println(temp[1][1]);//输出1
在一维数组中直接使用数组的 length 属性获取数组元素的个数。而在二维数组中,直接使用 length 属性获取的是数组的行数,在指定的索引后加上 length(如 array[0].length)表示的是该行拥有多少个元素,使用嵌套循环来遍历二维数组
public static void main(String[] args) { double[][] temp={{1,2},{3,4},{5,6}}; for(int i=0;i<temp.length;i++) { for(int j=0;j<temp[i].length;j++) { System.out.println("temp["+i+"]["+j+"]"); } } }
除了一维数组和二维数组外,Java 中还支持更多维的数组,如三维数组、四维数组和五维数组等,它们都属于多维数组
以三维数组为例来介绍多维数组,三维数组有三个层次,能够将三维数组理解为一个一维数组,其内容的每一个元素都是二维数组。依此类推,能够获取任意维数的数组。
多维数组的声明、初始化和使用都与二维数组类似。
array[i][j][r]; int[][][] temp={{1,2,1},{3,4,3},{5,6,5}}; System.out.println(temp[1][1][1]);//输出1
其余与二维数组基本类似
数组相等的条件不只要求数组元素的个数必须相等,并且要求对应位置的元素也相等。Arrays 类提供了 equals() 方法比较整个数组,arrayA 是用于比较的第一个数组,arrayB 是用于比较的第二个数组
Arrays.equals(arrayA, arrayB); int[] arr1={1,2,3}; int[] arr2={1,2,3}; int[] arr3={1,2,3,4}; Arrays.equals(arr1, arr2);//ture Arrays.equals(arr1, arr3);//false
查找数组是指从数组中查询指定位置的元素,或者查询某元素在指定数组中的位置。使用 Arrays 类的 binarySearch() 方法能够实现数组的查找,该方法可以使用二分搜索法来搜索指定数组,以得到指定对象,该方法返回要搜索元素的索引值,binarySearch() 方法有多种重载形式来知足不一样类型数组的查找须要,经常使用的重载形式有两种。
在进行数组查询以前,必须对数组进行排序(能够使用 sort() 方法)。若是没有对数组进行排序,则结果是不肯定的。若是数组包含多个带有指定值的元素,则没法确认找到的是哪个
a 表示要搜索的数组,key 表示要搜索的值。若是 key 包含在数组中,则返回搜索值的索引;不然返回 -1 或“-插入点”。插入点指搜索键将要插入数组的位置,即第一个大于此键的元素索引
int[] arr={1,2,3}; Arrays.binarySearch(arr,1);//查到,位置0 Arrays.binarySearch(arr,4);//查不到,返回-1
a 表示要进行查找的数组,fromIndex 指定范围的开始处索引(包含开始处),toIndex 指定范围的结束处索引(不包含结束处),key 表示要搜索的元素
int[] arr={1,2,3}; Arrays.binarySearch(arr,0,2,1);//查到,位置0 Arrays.binarySearch(arr,0,1,3);//查不到,返回-1
实现数组复制有 4 种方法,分别为使用 Arrays 类的 copyOf() 方法和 copyOfRange() 方法、System 类的 arraycopy() 方法和 Object 类的 clone() 方法
copyOf() 方法是复制数组至指定长度
Arrays.copyOf(dataType[] srcArray,int length);
srcArray 表示要进行复制的数组,length 表示复制后的新数组的长度,使用这种方法复制数组时,默认从源数组的第一个元素(索引值为 0)开始复制,目标数组的长度将为 length。若是 length 大于 srcArray.length,则目标数组中采用默认值填充(如:int类型数组默认值为0);若是 length 小于 srcArray.length,则复制到第 length 个元素(索引值为 length-1)即止。
int arr[]=new int[]{1,2,3}; int[] newArr=(int[])Arrays.copyOf(arr,4);//新数组1,2,3,0
copyOfRange() 方法则将指定数组的指定长度复制到一个新数组中
Arrays.copyOfRange(dataType[] srcArray,int startIndex,int endIndex)
srcArray 表示源数组;startIndex 表示开始复制的起始索引,目标数组中将包含起始索引对应的元素,另外,startIndex 必须在 0 到 srcArray.length 之间;endIndex 表示终止索引,目标数组中将不包含终止索引对应的元素,endIndex 必须大于等于 startIndex,能够大于 srcArray.length,若是大于 srcArray.length,则目标数组中使用默认值填充
int arr[]=new int[]{1,2,3}; int[] newArr=(int[])Arrays.copyOf(arr,1,4);//新数组2,3,0
arraycopy() 方法位于 java.lang.System 类中
System.arraycopy(dataType[] srcArray,int srcIndex,int destArray,int destIndex,int length)
srcArray 表示源数组;srcIndex 表示源数组中的起始索引;destArray 表示目标数组;destIndex 表示目标数组中的起始索引;length 表示要复制的数组长度,length+srcIndex 必须小于等于 srcArray.length,同时 length+destIndex 必须小于等于 destArray.length
int arr[]=new int[]{1,2,3}; int newArr[]==new int[]{4,5,6}; System.arraycopy(arr,0, newArr,2,3);//新数组4,2,6
clone() 方法也能够实现复制数组。该方法是类 Object 中的方法,能够建立一个有单独内存空间的对象。由于数组也是一个 Object 类,所以也能够使用数组对象的 clone() 方法来复制数组
array_name.clone() int[] targetArray=(int[])sourceArray.clone();
java.util.Arrays 类中的 sort() 方法对数组进行排序分为如下两步:导入 java.util.Arrays 包。使用 Armys.sort(数组名) 语法对数组进行排序,排序规则是从小到大,即升序。
int[] arr=new int[]{1,5,4,3,6,2}; Arrays.sort(scores);//输出 1,2,3,4,5,6
冒泡排序(Bubble Sort)是经常使用的数组排序算法之一,冒泡排序的基本思想是:对比相邻的元素值,若是知足条件就交换元素值,把较小的元素值移动到数组前面,把大的元素值移动到数组后面(也就是交换两个元素的位置),这样数组元素就像气泡同样从底部上升到顶部。
int[] arr={6,3,8,2,9,1}; for(int i=0;i<arr.length-1;i++){//外层循环控制排序趟数 for(int j=0;j<arr.length-1-i;j++){//内层循环控制每一趟排序多少次 if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }
快速排序(Quicksort)是对冒泡排序的一种改进,快速排序的基本思想是:经过一趟排序,将要排序的数据分隔成独立的两部分,其中一部分的全部数据比另一部分的全部数据都要小,而后再按此方法对这两部分数据分别进行快速排序,整个排序过程能够递归进行,以此使整个数据变成有序序列。
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19}; public static void quickSort(int[] arr,int low,int high){ int i,j,temp,t; if(low>high){ return; } i=low; j=high; temp = arr[low];//temp就是基准位 while (i<j) {//先看右边,依次往左递减 while (temp<=arr[j]&&i<j) { j--; } while (temp>=arr[i]&&i<j) {//再看左边,依次往右递增 i++; } if (i<j) {//若是知足条件则交换 t = arr[j]; arr[j] = arr[i]; arr[i] = t; } } //最后将基准为与i和j相等位置的数字交换 arr[low] = arr[i]; arr[i] = temp; //递归调用左半数组 quickSort(arr, low, j-1); //递归调用右半数组 quickSort(arr, j+1, high); } quickSort(arr, 0, arr.length-1);
选择排序法也能够对上述数组中的元素进行排序,可是它与冒泡排序不一样。选择排序是指每一趟从待排序的数据元素中选出最大(或最小)的一个元素,顺序放在已排好序的数列的最后,直到所有待排序的数据元素排完
int[] number={13,15,24,99,4,1}; int index; for(int i=1;i<number.length;i++) { index=0; for(int j=1;j<=number.length-i;j++) { if(number[j]>number[index]) { index=j; //查找最大值 } } int temp=number[number.length-i]; number[number.length-1]=number[index]; number[index]=temp; }