------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1、概念
数组是同一种类型数据的集合。简单的来说就是一容器,用来装东西的。使用数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
2、一维数组
格式1:元素类型 [ ]数组名 = new 元素类型 [元素个数或数组长度] ;
如: int [] arr = new int [5]; 也可以写成: int arr[] = new int[5];
格式2:元素类型 []数组名 = new 元素类型 [ ]{元素1,元素2,…};
如: int [] arr = new int []{1,2,3};
还有一种简写的静态初始化格式:如: int [] arr={1,2,3};
其中:new是用来在堆内存中产生一个容器实体。
3、二维数组
格式1: int[][] arr = new int[2][3];
解释:以上格式表示定义了名称为arr的二维数组。有2个一维数组,每一个一维数组中有3个元素。一维数组的名称分别为arr[0],arr[1],给第一个一维数组1脚标位赋值为9写法是:arr[0][1] = 9。
格式2: int[][] arr= new int[3][]; 此种格式中每个一维数组都是默认初始化值null。
格式3:int[][] arr = {{2,1,4},{3,5},{6,1,2,7}};//每一个一维数组中具体元素都初始化了。
注:一种特殊定义写法:int[]x,y[]; x是一维数组,y是二维数组。
4、数据常见问题
1、数组脚标越界异常(ArrayIndexOutOfBoundsException)。例:
int[] arr = new int[5];
System.out.println(arr[6]);
访问到了数组中的不存在的脚标时发生。
2、空指针异常(NullPointerException)。例:
int[] arr = null;
System.out.println(arr[0]);
arr引用没有指向实体,却在操作实体中的元素时。
5、数据排序
在java.util包中有一个Arrays工具类,里面有个sort方法,可以对数据实现快速排序。
5.1 冒泡排序
/**
* 冒泡排序法
* BubbleSort.java
* @author guoqiang
* created 2015年3月17日 下午4:15:56
* @version 1.0
*/
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {3,9,20,34,8,98,5,12};
System.out.println("数组排序前:");
for(int i=0;i arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("\n数组排序后:");
for(int i=0;i
运行结果:5.2选择排序法
/**
* 选择排序法
* SelectionSort.java
* @author guoqiang
* created 2015年3月17日 下午4:25:37
* @version 1.0
*/
public class SelectionSort {
public static void main(String[] args) {
int[] arr = {3,9,20,34,8,98,5,12};
System.out.println("数组用选择排序前:");
for(int i=0;i arr[j]) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
System.out.println("\n数组用选择排序后:");
for(int i=0;i
6、数组的二分查找法
public class ArraySearch {
public static void main(String[] args) {
int[] arr = {4,6,9,10,34,48,50,61,70};
System.out.println("用第一种方法查找数字50在数组中的索引是" + binaryChopOne(arr, 50));
System.out.println("用第二种方法查找数字50在数组中的索引是" + binaryChopTwo(arr, 50));
}
/**
* 二分查找法第一种
* 前提:数据必须是有序的
* @param arr
* @param key
* @return
*/
public static int binaryChopOne(int[] arr, int key) {
int min = 0;
int max = arr.length - 1;
int middle = (min + max ) /2;
while(key != arr[middle]) {
if(key > arr[middle]) {
min = middle + 1;
} else if(key < arr[middle]){
max = middle - 1;
}
if(min > max) {
return -1;
}
middle = (min + max ) /2;
}
return middle;
}
/**
* 二分查找法第二种
* 前提:数据必须是有序的
* @param arr
* @param key
* @return
*/
public static int binaryChopTwo(int[] arr, int key) {
int min = 0;
int max = arr.length - 1;
int middle;
while(min <= max) {
middle = (min + max ) >> 1;
if(key > arr[middle]) {
min = middle + 1;
} else if(key < arr[middle]){
max = middle - 1;
}else {
return middle;
}
}
return -1;
}
}
运行结果:
用第一种方法查找数字50在数组中的索引是6
用第二种方法查找数字50在数组中的索引是6