java_04-数组

java_04-数组

一维数组

package main.java.chapter3dir;

import java.lang.reflect.Array;

/**
 * 一、数组的概述
 * 1.数组的理解,数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
 * <p>
 * 2.数组相关概念
 * >数组名
 * >元素
 * >角标、下标、索引
 * >数组的长度:元素的个数
 * <p>
 * 3.数组的特点
 * 1)数组是有序排列的
 * 2)数组属于引用数据类型。数组的元素既可以是基本数据类型,也可以是引用数据类型。
 * 3)创建数组对象会在内存中开辟一整块连续的空间
 * 4)数组的长度一旦确定,就不能修改
 * <p>
 * 4.数组的分类
 * 1)按照维数:一维数组、二维数组。。
 * 2)按照数组元素的类型:基本数据类型元素的数组、引用数据类型元素的数组
 * <p>
 * 5.一维数组的使用
 * 1)一维数组的声明和初始化
 * 2)如何调用数组的指定位置的元素
 * 3)如何获取数组的长度
 * 4)如何遍历数组
 * 5)数组元素的默认初始值
 * 6)数组的内存解析
 */
public class Q1Array {
    public static void main(String[] args) {
        // 1.一维数组的声明和初始化?
        int num;    // 声明
        num = 10;   // 初始化
        int id = 1001;  // 什声明和初始化

        int[] nums;
        // 1.1 静态初始化:数组的初始化和数组的赋值操作同时进行
        nums = new int[]{1, 2, 3, 4};
        // 1.2 动态初始化:数组的初始化和数组元素的赋值操作分开进行
        int[] nums2 = new int[3];
        nums2[0] = 1;
        nums2[1] = 2;
        nums2[2] = 3;

        // 2.如何调用数组的指定位置的元素?// 通过索引方式调用(java中数组的索引从0开始到数组长度-1结束)。
        System.out.println(nums2[0]);

        // 3.如何获取数组的长度
        // 属性:length

        // 4.如何遍历数组
        System.out.println("---如何遍历数组---");
        System.out.println(nums2[0]);
        for (int i = 0; i < nums2.length; i++) {
            System.out.println(nums2[i]);
        }

        // 5.数组元素的初始化值
        /**
         * 数组元素的初始化值
         * > 整形: 0
         * > 浮点型: 0.0
         * > boolean: false
         * > char: 0 或 '\u0000' 而非'0'
         * > 引用数据类型 比如string: null
         *
         */

        System.out.println("---数组元素初始化值---");
        int[] int1 = new int[3];
        float[] float1 = new float[3];
        boolean[] boolean1 = new boolean[3];
        String[] stirng1 = new String[3];
        char[] char1 = new char[3];
        System.out.println(int1[0]);    // 0
        System.out.println(float1[0]);  // 0.0
        System.out.println(boolean1[0]);    // false
        System.out.println("aaaa" + char1[0] + "hhhh");   // aaaahhhh 0或'\u0000' 而非'0' 但是实际看到的效果是空格
        if (char1[0] == 0) {
            System.out.println("你好");
        }

        // 6. 数组的内存解析 见logic——note.ppt
        System.out.println(stirng1[0]); // null
        
    }

}

一维数组的内存解析

在这里插入图片描述

二维数组

大部分和一维数组相同,部分细节记录:

二维数组元素的初始化值(很重要)

针对于初始化方式一:比如:int[ ][ ] arr = new int[4][3]
外层元素的初始化值为:地址值。 arr[0] 返回[I@15db9742,arr 返回[[I@6d06d69c。原因参见内存解析
内层元素的初始化值为:与一维数组初始化情况相同。 arr[0][0] 返回0
针对于初始化方式二:比如:int[ ][ ] arr = new int[4][ ];
外层元素的初始化值为:null。arr[0] 返回null
内层元素的初始化值为:不能调用,否则报空指针异常

二维数组的内存解析

在这里插入图片描述

数组的常见算法

冒泡排序done见java_05-面向对象01

Arrays工具类的使用

Q6ArrayUtil.java
package main.java.chapter5dir;

import java.lang.reflect.Array;

/**
 * 自定义数组的工具类
 *
 * 目的:熟悉方法是否返回和返回值类型
 */
public class Q6ArrayUtil {


    // 求数组的最大值
    public int getMax(int[] arr1){
        int maxNum = 0;
        for(int i = 0; i < arr1.length; i++){
            if(arr1[i] > maxNum){
                maxNum = arr1[i];
            }
        }
        return maxNum;
    }

    // 求数组的最小值
    public int getMin(int[] arr1){
        int minNum = 0;
        for(int i = 0; i < arr1.length; i++){
            if(arr1[i] < minNum){
                minNum = arr1[i];
            }
        }
        return minNum;
    }

    // 求数组的总和
    public int getSum(int[] arr1){
        int sum = 0;
        for(int i = 0; i < arr1.length; i++){
            sum += arr1[i];
        }
        return sum;
    }

    // 求数组的平均值
    public double getAvg(int[] arr1){
        if(arr1.length>0) {
            return (double) getSum(arr1) / arr1.length;
        }
        return 0.0;
    }


    // 反转数组
    public void reserve(int[] arr1){
        int tmp;
        for(int i = 0; i < arr1.length/2; i++){
            tmp = arr1[i];
            arr1[i] = arr1[arr1.length-1-i];
            arr1[arr1.length-1-i] = tmp;
        }
    }

    // 复制数组
    /**
     * 数组的复制
     * @param arr1 源数组
     * @param arr2 目标数组
     */
    public void copy(int[] arr1, int[] arr2){
        for(int i = 0; i < arr2.length; i++){
            arr2[i] = arr1[i];
        }
    }

    // 数组排序 升序
    public void sort(int[] arr1){
        //  冒泡排序
        for(int i = 0; i < arr1.length; i++){
            int tmp ;
            for(int j = 0; j < arr1.length - 1 - i; j++){
                if(arr1[j + 1] < arr1[j]){
                   tmp = arr1[j];
                   arr1[j] = arr1[j+1];
                   arr1[j+1] = tmp;
                }
            }
        }

    }

    // 遍历打印数组
    public void bianli(int[] arr1){
        String strArr = "[";
        for(int i = 0; i < arr1.length; i++){
            if(i != arr1.length-1 ){
                strArr += (arr1[i] + ","); // 注意:双引号"" 和 括号 debug发现
            } else {
                strArr += arr1[i];
            }
        }
        strArr += "]";
        System.out.println(strArr);

    }

    // 查找指定元素

    /**
     * 查找数组中第n位元素
     * @param arr1 数组
     * @param arg 第N位
     * @return
     */
    public int search(int[] arr1,int arg){
        for(int i = 0; i < arr1.length; i++){
            if(i == arg-1){
                return arr1[i];
            }
        }
        return 0;
    }
}



Q6ArrayUtilTest.java
package main.java.chapter5dir;


import javax.sound.midi.Soundbank;

public class Q6ArrayUtilTest {
    public static void main(String[] args) {
        // 测试数据
        int[] arr = new int[]{7,8,9,1};
        Q6ArrayUtil arrUtil = new Q6ArrayUtil();

        System.out.println("最大值:" + arrUtil.getMax(arr)); // 9

        System.out.println("最小值:" + arrUtil.getMin(arr)); // 0

        System.out.println("数组的总和:" + arrUtil.getSum(arr)); // 25

        System.out.println("数组的平均值:" + arrUtil.getAvg(arr)); //<double> 6.25

        int[] arr2 = new int[]{7,8,9,1,5};
        System.out.println("反转数组前:");
        arrUtil.bianli(arr2); // [7,8,9,1,5]
        System.out.println("反转数组后:");
        arrUtil.reserve(arr2);
        arrUtil.bianli(arr2); // [5,1,9,8,7]

        // 数组的复制 arr3复制arr  区别于地址的复制
        int[] arr3 = new int[arr.length];
        arrUtil.copy(arr,arr3);
        System.out.println("复制数组返回结果:");
        arrUtil.bianli(arr3);   // [7,8,9,1]


        //排序
        int[] arr4 = new int[]{6,8,9,1,9,1,0,7,5};
        System.out.println("升序前:");
        arrUtil.bianli(arr4);  //   [6,8,9,1,9,1,0,7,5]
        System.out.println("升序后:");
        arrUtil.sort(arr4); // [0,1,1,5,6,7,8,9,9]
        arrUtil.bianli(arr4);

        System.out.println(arrUtil.search(arr,3)); // 9

    }

}

数组的常见异常


已更新发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值