七、数组

1.java中创建数组的方式

案例
    int[] array = new int[10];
/*
赋值号左侧:
	int:
		告知编译器,这里创建定义的是一个int类型数组,有且只能保存int类型数据,保
		证数据类型一致化
	[]:
		1. 告知编译器,当前定义的数据类型是一个数组类型
		2. 数组名 array是一个【引用数据类型】
	array:
		1. 这里是一个数组名,操作数组的核心数据!!!就是一个变量名
		2. 数组名 array是一个【引用数据类型】

赋值号右侧:
	new:
		new关键字需要在计算机中申请【连续内存空间】,这块区域在内存的【堆区】
		【生活案例】这里就好比,顾客找仓库管理员申请货架,管理员一定是给你一个整
		个连续区域给你使用
	int:
		前后呼应,告知编译器这里能够存储的数据类型是int类型,其他类型都不可以,要
		求数据类型一致化
	[10]:
		告知编译器,当前数组的【容量 Capacity】是多少,这里是10,也就是说当前数
		组中有且只能保存10个int类型数据
*/

引用数据类型:
引用在生活中很常见,比如 文献中引用,文言文注解引用,广告角标上标引用,这些目的,引入其他的内容,其他的文献,其他的操作... 
	引用存在的一定的【指向性!!!】
开发中的【引用数据类型】,实际上是一个指向其他内存空间的一个数据类型。引用数据类型的变量中存储的内容是其他内存空间的【首地址】。
	当CPU访问到【引用数据类型】变量时,会得到其存储的地址,然后直接跳转到对应的内存空间中,执行代码,获取数据,操作内容...

2.定义数组并使用

定义数组:
	int[] array = new int[10];

需要操作数组中哪一个元素,这里需要使用数组的【下标】
    计算机内数据的开头都是从0开始,数组容量为10的情况
   	有效下标的范围
    	0 ~ 9
    	0 ~ 数组容量 Capacity - 1

操作格式:
	数组名[有效下标] 

3.数组内存分析图

int[] array = new int[10];
array[0] = 10;
array[5] = 20;

1587639196967

4.数组循环赋值并取值

class Demo {
	public static void main(String[] args) {
		/* 定义一个int类型数组 容量为10 */
		int[] arr = new int[10];
		
		/*
		数组名.length 
			获取当前数组的【容量 Capacity】,获取数组的【属性】
		*/
		for (int i = 0; i < arr.length; i++) {
			// 给数组中每一个元素赋值操作 
			arr[i] = i + 1;
		}
		
        // 利用循环展示数据
		for (int i = 0; i < arr.length; i++) {
			System.out.println(arr[i]);
		}
	}
}

5.数组操作

5.1数组地址转移作图分析

1587725039455

5.2 数组作为方法的参数

class Test2 {
    public static void main(String[] args) {
        int[] array = {10, 8, 35, 67, 31, 25, 11, 30, 28, 99};
        int find = 30;

        // 调用的方法需要数组作为方法的参数,
        // 这里传入【数组名】
        int index = indexOf(array, find);

        if (index >= 0) {
            System.out.println("index : " + index);
        } else {
            System.out.println("Not Found!");
        }
    }

    /**
     * 在指定数组arr中,查询指定元素find所在的下标位置,找到返回值大于等于0,没有找到
     * 返回-1
     *
     * @param arr  查询数据的源数据数组,int类型数组
     * @param find 指定在数组中查询的数据,也是对应int类型
     * @return 找到指定元素,返回值大于等于0,否则返回-1
     */
    public static int indexOf(int[] arr, int find) {
        // 假设查询的数据不存在
        int index = -1;

        // 遍历整个数组
        for (int i = 0; i < arr.length; i++) {
            // 发现数组中下标为i的元素和find一致,找到内容,保存下标
            if (find == arr[i]) {
                index = i;
                // 终止循环
                break;
            }
        }

        // 返回index中保存的数据
        return index;
    }
}

5.3 数组作为方法参数作图分析

1587726933906

5.4 总结

1. 数组作为方法参数的固定格式
	(数据类型[] 数组参数名)
2. 数组作为方法的实际参数的固定格式
	(数组名)
3. 数组名作为方法的参数,实际传递的是数组空间首地址,就是和数组地址转移问题是一致的
4. 方法执行需要参数,如果没有给予对应格式的实际参数,直接报错

5.5 逆序数组练习

分析过程

/*
需求:
	存在一个int类型数组,使用方法逆序数组中的元素
	例如:
		int[] arr = 
		{1, 2, 3, 4, 5};
		执行之后
		{5, 4, 3, 2, 1};

方法分析:
	访问权限:
		public static 
	返回值类型:
		void 
	方法名:
		reverse
	形式参数列表:
		int[] arr 这里需要一个int类型数组
		
方法声明:
	public staitc void reverse(int[] arr)
*/

代码

class ReverseArray {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};

        System.out.print("方法调用之前:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        reverse(arr);

        System.out.print("方法调用之后:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
    }

    /**
     * 数组逆序
     *
     * @param arr 需要被逆序的int类型数组
     */
    public static void reverse(int[] arr) {
        for (int i = 0; i < arr.length / 2; i++) {
            int temp = arr[i];
            arr[i] = arr[arr.length - 1 - i];
            arr[arr.length - 1 - i] = temp;
        }
    }
}

posted @ 2020-04-24 20:26  jacob_code  阅读(68)  评论(0)    收藏  举报