黑马程序员——数组


------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

数组:

数组可以分为很多维度的数组,根据自己所学知识,总结一维数组和二维数组内容。

 

    特点:

         1、只能存储同一种数据类型且多个元素的容器。可以存储基本类型,也可以存储引用类型。

         2、数组长度是固定不可变的。

         3、每一个元素都有对应的编号,从左边第一位以0开始,直到最后一个元素。

                                编号的专业叫法:索引。

         4、每一个数组都有自己的长度,从左边第一位以1开始,直到最后一个元素。

                                长度的获取方法:数组名.length;   

所以根据上面4点的特点,如果一个数组的元素很多,不可能一个个的去数,才能获取索引,此时就用数组名.length-1,就能知道一个数组的最大索引。

 

一维数组的初始化:

         1、动态初始化:只给长度,系统给出默认值,数组元素的默认值为0

                        数据类型[] 数组名 = new 数据类型[给出的长度];

                                   int[] arr = new int[3];

         2、静态初始化:给出每一个元素,系统决定长度。

                        数据类型[] 数组名 = {给出的元素};

                                   int[] arr = {1,2,3};

一维数组遍历:

 

public class ArrayDemo {
    public static void main(String[] args) {
		 //定义一维数组,静态初始化
    	int[] arr ={1,2,3,4,5,6};
    	
    	//使用for循环对数组进行遍历
    	for(int i=0;i

二维数组的初始化:

        理解:二维数组的每一个元素都是一维数组。

 

    1、动态初始化:只给出二维数组的长度和其元素的长度,二维数组的元素索引也是从0开始。

       数据类型[][] 数组名 = new 数据类型[一维数组的数量][每一个一维数组的长度];

                 int[][] arr = new int[3][2];

2、静态初始化:给出每一个元素和其元素的内容,系统决定长度。

  数据类型[][] 数组名 ={第一个元素内容},{第二个元素内容},{第三个元素内容};

          int[][] arr ={{1,2},{3,4},{5,6}};

       

二维数组遍历:

如何遍历呢?

      拿int[][] arr ={{1,2},{3,4},{5,6}};举例,这个二维数组里面有三个元素,那其长度也就是3,索引也就是数组名.length-1等于2,这样就知道二维数组三个元素的索引arr[0]arr[1]arr[2]。而这时只是得到了二维数组中的一维数组的地址值,要想遍历获取所有的内容,那么在每一个元素的基础上再去遍历获取每一个索引的值,如:arr[0][0],表示的是二维数组中的第一个一维数组上的第0个索引的值。

 

public class ArrayDemo {
    public static void main(String[] args) {
		 //定义二维数组,静态初始化
    	int[][] arr ={{1,2},{3,4},{5,6}};
    	
    	/**
    	 * 用for循环嵌套,先获取每一个一维数组,
    	 * 再获取这个一维数组内的每一个索引的值
    	 */
    	for(int i=0;i

 

数组的注意事项:

     1、使用数组就是为了存储同一种数据类型且多个元素,那么就一定要初始化数组,否则无意义。

     2、使用数组很容易出现访问数组越界,即“ArrayIndexOutOfBoundsException”运行时异常。

 

 

数组排序:

数组排序有很多种方法,下面就举几个常用的排序方法作为演示:

 

import java.util.Arrays;

public class ArrayDemo {
	public static void main(String[] args) {
		// 定义一维数组
		int[] arr = { 8, 5, 4, 2, 7, 1, 9, 6, 3 };

		// 调用Arrays数组工具类的sort()方法
//		method_1(arr);
		//调用选择排序方法
//		method_2(arr);
		//调用冒泡排序方法
		method_3(arr);

		for (int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
	}
	//冒泡排序,相邻的两个数,两两相比,大的就往后移动(此方法要注意数组越界和重复比较)
    public static void method_3(int[] arr) {
        for(int i=0;iarr[j+1]){
        			int temp = arr[j];
        			arr[j] = arr[j+1];
        			arr[j+1] = temp;
        		}
        	}
        }
	}
	//选择排序,从索引0开始每个值都和后面的每一个索引值比较,大的往后移动,依次递增相比。
	public static void method_2(int[] arr) {
        for(int i=0;iarr[j]){
        			int temp = arr[i];
        			arr[i] = arr[j];
        			arr[j] = temp;
        		}
        	}
        }
	}
    //Arrays类的sort()方法省时省力
	public static void method_1(int[] arr) {
		Arrays.sort(arr);
	}
}

 

数组查找:

   举基本查找和二分查找两种常用方法:

           不过要注意二分查找是针对数组有序的情况下适合使用。

   

public class ArrayDemo {
	public static void main(String[] args) {
		// 定义无序数组
//		int[] arr = { 8, 5, 4, 2, 7, 1, 9, 6, 3 };
		//调用基本查找法
//		int index = method_1(arr,1);
		
		//定义有序数组
		int[] arr ={1,5,9,12,25,55,65,89};
		//调用二分查找法
		int index = method_2(arr,9);
		
		System.out.println(index);
	}
    /**
     * 二分查找法,针对数组有序的情况。
     * 如果为了使用二分查找而把原数组进行排序,
     * 那么得到的索引值已经不是原数组的索引值
     */
	public static int method_2(int[] arr, int value) {
		int min = 0,max = arr.length-1,mid = (min+max)/2;
		
		while(arr[mid] != value){
			if(arr[mid] > value){
				max = mid - 1;
			}else if(arr[mid] < value){
				min = mid + 1;
			}
			if(min > max){
				return -1;
			}
			mid = (min+max)/2;
		}
		return mid;
	}
	//基本查找,对于数组有序或无序都能使用
	public static int method_1(int[] arr, int value) {
		int index = -1;
		
		for(int i=0;i

Arrays工具类:

      这是针对数组进行操作的工具类。其中包括排序、查找、复制、比较等功能。

 

 

注:数组和集合很相似,对于初学者很容易弄混,小弟会自开一篇集合。

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

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