数组是具有相同数据类型的一组数据的集合。在Java中将数组看做是一个对象。
一维数组的创建及使用
创建一维数组
数组作为对象允许使用new
关键字进行内存分配。在使用数组之前,必须首先定义数组变量所属的类型。
一维数组的创建有下列两种形式。
1. 先声明,再用new运算符进行内存分配
int arr[]; //声明int型数组,数组中的每个变量都是int型数据
arr = new int[5]; //为数组分配内存
需要注意的是,在为数组分配内存的时候必须指明数组的长度。
使用new关键字初始的时候,每个元素的初始值都是0
2. 声明的同时为数组分配内存
int month[] = new int[12];
初始化一维数组
数组的初始化可分别初始化数组中的每个元素,数组的初始化有以下两种形式。用逗号分开。
int arr[] = new int[]{1,2,3,4,5}; //创建5个元素的数组
int arr2[] = {1,2,3,4}; //创建4个元素的数组
使用一维数组
使用下标的形式使用数组。
int day[] = new int[]{31,28,31,30,31,30,31,31,30,31,30,31};
for(int i=0;i<12;i++){
System.out.println(day[i]);
}
二维数组的创建及使用
如果一维数组中的各个元素依然是一个数组,那么它就是一个二维数组。二维数组常用于表示表。表中的信息以行和列的形式组织。第一个下标代表元素所在的行,第二个元素代表列。
二维数组的创建
二维数组可以看做是特殊的一维数组。因此,二维数组的创建同样有两种形式。
1. 先声明,再用new运算符进行内存分配
int arr[][]; //声明int型二维数组,数组中的每个变量都是int数组
对于高维数组,有两种为数组分配内存的方式
- 直接为每一维分配内存
- 分别为每一维分配内存
arr = new int[2][4]; //第一种
arr = new int[2][]; //第二种
arr[0] = new int[3];
arr[1] = new int[4];
2. 声明的同时为数组分配内存
初始化二维数组
int myarr[][] = {{1,2},{3,4}};
需要注意的是如果没有初始化,默认值0。
使用二维数组
int myarr[][] = {{1,2},{3,4}};
for(int i=0;i<myarr.length;i++)
for(int j=0;j<myarr[i].length;j++)
System.out.println(myarr[i][j]);
数组的基本操作
java.util
包中的Array
类包含了用来操作数组(如搜索和排序)的各种方法,本节介绍基本的操作。
遍历数组
遍历数组就是获取数组的每个元素。通常使用for循环来实现。也可以使用foreach来实现。
int myarr[][] = {{1,2},{3,4}};
for(int i=0;i<myarr.length;i++)
for(int j=0;j<myarr[i].length;j++)
System.out.println(myarr[i][j]);
for(int[] a:myarr){
for(int b:a){
System.out.println(b);
}
}
填充替换数组元素
数组定义完成后,可通过Arrays
类的静态方法fill
来对数组中的元素进行替换,有两种参数类型。
int arr[] = new int[8];
Arrays.fill(arr,8); //将指定值分配给数组的每一个元素
Arrays.fill(arr,2,5,8); //将指定值分配给数组指定范围内的数
对数组进行排序
可通过Arrays
类的静态方法sort
来对数组中的元素进行排序。
int arr[] = new int[]{5,5,233,45,2};
Arrays.sort(arr);
String b[] = new String[]{"fasd","fds","gdf","er"};
Arrays.sort(b); //按照字典顺序排序
复制数组
可通过Arrays
类的静态方法copyOf
和copyOfRange
来对数组中的元素进行复制。
String b[] = new String[]{"fasd","fds","gdf","er"}; //声明数组
String c[] = Arrays.copyOf(b,6); //复制数组 newLength小于b则截断 大于则设为null
String d[] = Arrays.copyOfRange(b,2,4); //复制从2到4下标的元素到d中
数组查询
可通过Arrays
类的静态方法binarySearch
二分搜索法来搜索指定元素,返回搜索元素的索引值。
int array[] = new int[]{3,6,2,4,7};
Arrays.sort(array);
System.out.println(Arrays.binarySearch(array,4)); // 2
System.out.println(Arrays.binarySearch(array,1,3,4)); // 在1到3范围内搜索
数组排序算法
冒泡排序
最常用的一种排序算法,排序过程中将小数往前放,大数往后放。
基本思想
对比相邻元素,如果满足条件就交换,把较小的元素放到数组前面,较大元素放到后面。
双重循环实现,外层循环控制排序轮数,内层循环进行对比相邻元素的大小。
public static void bubble(int[] array){
for(int i=1;i<array.length;i++)
for(int j=0;j<array.length-i;j++){
if(array[j+1]<array[j]){
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}