Java教程

8.11Java之数组知识回顾

本文主要是介绍8.11Java之数组知识回顾,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

8.11Java之数组知识回顾

数组

  • 一维数组的定义与使用方式

  • 数组基本练习

  • Arrays工具类

  • 案例---点名器

  • 二维数组

数组定义

相同类型数据的有序集合

  • 一开始大小固定--->开始初始化

  • 数组本身属于引用类型--->初始化需要new一个对象并且开辟空间

  • 数组中可以存储任意类型的数据

创建数组时的内存分配说明

数组的使用

通过索引去使用数组:

数组的遍历方式

普通for循环:

增强for循环:--->因为数组本身是一个对象

普通for循环打印数组内容
    /**
     * 普通for循环方法
     */
    public static void forArray(){
        int[] number = {1,2,3,4,5};
        for (int i=0; i<number.length; i++){
            System.out.println(number[i]);
        }
    }
增强for循环打印数组内容
    /**
     * 增强for循环打印数组内容
     */
    public static void forEachArray(){
        int[] number = {5,4,3,2,1};
        for (int num : number){
            System.out.println(num);
        }
    }

这两种打印方法在本质上是有区别的主要区别在内存上:

普通for循环:

  • 打印的number[i]中这个"i"是一个引用

增强for循环:

  • 将堆内存的数组中的值取出,放入到变量num当中,再去打印出。不便于引用

数组的关键理解
    /**
     * 数组赋值的方法
     */
    public static void changeArray(){
        //int[] number = {};
        /*
        上面这个写法实际上在堆内存当中并没有开辟对象空间
        所以之前直接循环是无法对数组进行赋值
        基本数据类型的数组无法使用动态分配的方式进行赋值
        因为基本数据类型不需要new一个对象去创建。即便使用包装类那么返回的也是一个基本数据类型的值
        而该值不需要创建对象
         */
        int[] number = new int[10];
        for (int i=0; i<10; i++){
            number[i] = 10*(i-1);
            System.out.println(number[i]);
        }
    }
​
    /**
     * 动态分配空间赋值
     */
    public static void changeArrays(){
        int[] number = {};
        for (int i=0; i<number.length; i++){
            number[i] = new Integer(10*(i-1));
            System.out.println(number[i]);
        }
        /*
        可以通过编译,但是没有结果
         */
    }
数组练习
    /**
     * 遍历char数组,倒序输出数组内容
     * @param arr 
     */
    public static void print(char[] arr){
        for (int i=arr.length-1; i>=0; i--){
            System.out.println(arr[i]);
        }
    }
    /**
     * 遍历int数组,获取最大值和最小值
     * @param arr
     */
    public static void printMaxMin(int[] arr){
        int max = arr[0];
        int min = arr[arr.length-1];
        for (int i=0; i<arr.length; i++){
            if (arr.length==1){
                System.out.println(arr[i]);
            }else {
                if (arr[i]>max){
                    max = arr[i];
                }else if (arr[i]<min){
                    min = arr[i];
                }
            }
        }
        /*
        抓头尾设为变量,然后用数据进行比较
        因为是比较大小所以需要比较必须有比较的对象
         */
        System.out.println(max);
        System.out.println(min);
    }
    /**
     * 实现一个随机的点名器
     *      使用循环去读取多对象--->设置索引为随机的
     * @param arr
     */
    public static void randomPrintName(String[] arr){
        int randomnumber = (int) (Math.random()*arr.length);
        System.out.println(arr[randomnumber]);
    }

多维数组

本章以二维数组进行举例

二维数组的定义:

数组中套数组

定义二位数组

实例:

static int[][] doubleArray = {{1,2},{2,3},{3,4}};
//如果使用的是直接定义长度的话
//不同维度的数组可以定义不同的空间长度

打印二维数组内的内容

实例:

    public static void print(int[][] arr){
        for (int[] num : arr){
            for (int number : num){
                System.out.println(number);
            }
            System.out.println(num);
        }
    }

num为引用,打印出来的是一个hash地址

number为内容的引用,打印出来的是具体值

二维数组的内存分析举例

注意:

  • 无论几维数组,都是引用类型

  • 其对象分配的空间都在堆中

给二维数组定义长度
    static int[][] doubleArrays = new int[5][]; //这里就没有定义二维数组的长度
    public static void createSpace(int[][] arr){
        arr[0] = new int[2];
        arr[0][1] = 1;
        System.out.println(arr[0][1]);
        /*
        因为要给二维数组的内部再进行长度定义,那么需要找到一位数组的索引
        然后再通过新建对象的方法给该索引下的空间进行长度定义
         */
    }

 

这篇关于8.11Java之数组知识回顾的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!