黑马程序员--Java基础语法之数组

------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

        格式3int[][] 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



你可能感兴趣的:(黑马程序员)