java基础学习笔记(二)数组部分

文章目录

      • 数组
        • 定义数组
        • 数组使用
        • 数组在内存中分析
        • tips
        • 引用数据类型
        • 数组与循环
        • 数组和方法的关系
        • 数组算法例题

数组

定义数组

数据类型[] 数组名 = new 数据类型[容量];
或
直接定义型:数据类型[] 数组名 = {
     1,2,3,4,5,6,7}

赋值左侧
数据类型:
告知编译器,当前数组中能够保存的数据类型是什么,定义之后,整个数组中保存的数据类型不能修改!

[]:
1. 告知编译器这里定义的是一个数组类型数据
2. 明确告知编译器,数组名是一个引用数据类型

数组名:
1. 操作数据非常重要
2. 数组名是一个引用数据类型

赋值右侧
new:
申请[xx]内存空间,并且清空整个内存空间中所有二进制位,所有的二进制位都是0
数据类型:
前后呼应,告知编译器此处支持存储的数据类型是什么
[容量]:
容量=>capacity
告知编译器,当前数组中能够存放的对应数据类型的数据,最大存储为多少
[注意]
一定确定容量,针对于当前数组,后期容量无法修改

新建数组,数组内默认值全为0

java基础学习笔记(二)数组部分_第1张图片

数组使用

java基础学习笔记(二)数组部分_第2张图片

  • 数组中的每个数据格被称为"数组元素"
  • 对每个元素进行赋值或取值的操作被称为"元素的访问"
  • 访问元素时,需要使用"下标"(从0开始,依次+1,自动生成)
  • 访问的语法:数组名[下标]

数组下标从0开始,到数组的容量-1

超出有效下标范围,都是无效下标,后期考虑数组处理异常问题,负数使用问题

操作会出现的问题

数组下标越界

报错:ArrayIndexOutOfBoundsException

class Demo9 {
     
    public static void main(String[] args) {
     
        int[] arr = new int[10];
        arr[0] = 5;
        arr[10] = 10;
        System.out.println("arr[0]:" + arr[0]);
        System.out.println("arr[0]:" + arr[10]);
        System.out.println("arr[0]:" + arr[-1]);
    }
}

java基础学习笔记(二)数组部分_第3张图片

编译过程中不会出现报错提示,在运行代码时,代码出现问题,这种异常叫做RuntimeException,运行时异常

数组在内存中分析

  • 栈区空间系统分配系统释放
  • 堆区程序员分配,java释放,或者程序员释放

引用数据类型保存的是另一个空间的首地址

java基础学习笔记(二)数组部分_第4张图片

java基础学习笔记(二)数组部分_第5张图片

栈区中是引用数据类型,存储的是数组的首地址,数组存储在堆区中

tips

论文降低重复率,论文翻译成英语在翻译成其他语言,然后翻译成中文

引用数据类型

开发中引用数据类型,用于保存其他内存空间的首地址,保存地址之后,cpu 可以通过对应的引用数据类型,得到相应的地址,从而访问地址对应内存空间

例:

class Demo10 {
     
    public static void main(String[] args) {
     
        int[] arr1 = new int[10];
        int[] arr2 = new int[10];

        arr1[5] = 100;
        arr2[5] = 200;

        System.out.println(arr1[5]);
        System.out.println(arr2[5]);
        
        // 这里只是将首地址进行了赋值操作
        arr1 = arr2;
        arr1[5] = 2000;

        System.out.println(arr1[5]);
        System.out.println(arr2[5]);
    }
}

java基础学习笔记(二)数组部分_第6张图片

java基础学习笔记(二)数组部分_第7张图片

原来的arr1会变成游离无主内存,会被jvm回收掉

数组与循环

获取数组容量

数组名.length  属性    

数组占用的空间比存储数据计算空间略大的原因:数组的length属性是要占用一定数组空间的,属于数组中的内容

class Demo10 {
     
    public static void main(String[] args) {
     
        int[] arr = new int[10];

        /**
         * 数组赋值
         */
        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 + "]=" + arr[i]);
        }
    }
}

java基础学习笔记(二)数组部分_第8张图片

数组和方法的关系

public static return methodName (arrayType[] arrayName)

arraytName是一个数组类型的变量,引用数据类型的变量,传递的是数组的首地址,所以assignIntArray函数才能成功的进行赋值

class Demo11 {
     
    public static void main(String[] args) {
     
        int[] array = new int[10];
        // 调用赋值数组中元素的方法
        assignIntArray(array);
        // 调用打印数组中元素的方法
        printIntArray(array);
    }


    /**
     * 数组赋值
     * @param arr
     */
    public static void assignIntArray(int[] arr) {
     
        for (int i = 0; i < arr.length; i++) {
     
            arr[i] = i + 1;
        }
    }

    /**
     * 打印数组
     * @param arr
     */
    public static void printIntArray(int[] arr) {
     
        for (int i = 0; i < arr.length; i++) {
     
            System.out.println("arr[" + i + "] = " + arr[i]);
        }
    }
}

java基础学习笔记(二)数组部分_第9张图片

数组算法例题

这部分单独一部分
https://blog.csdn.net/q20010619/article/details/116504468
数组算法例题
1.数组逆序
2.找出数组中最大值所在下标位置
3.找出数组中指定元素第一次出现的下标位置
4.在数组中找出指定下标对应的元素
5.找出指定元素在数组中最后一次出现位置
6.找到元素在指定数组中的所有下标位置
7.在指定位置插入指定元素
8.删除数组中指定下标的元素
9.冒泡排序算法
10.选择排序

你可能感兴趣的:(JAVA,java,数据结构,算法)