【Java】从头开始的Java复健day7

发布时间 2023-08-15 18:35:06作者: ryukirin

用的书:《Java从入门到精通》

day1(3.1-3.3): 【Java】从头开始的Java复健day1

day2(3.4-3.8): 【Java】从头开始的Java复健day2

day3(4.1-4.4): 【Java】从头开始的Java复健day3

day4(4.5-5.2): 【Java】从头开始的Java复健day4

day5(5.3-5.4): 【Java】从头开始的Java复健day5

day6(5.5-5.9): 【Java】从头开始的Java复健day6

第六章 数组

6.1 数组概述

数组是具有相同数据类型的一组数据的集合

6.2 一维数组的创建及使用

实质上就是一组相同类型数据的线性集合

创建一维数组

数组下标从0开始

  • 先声明 再用new运算符进行内存分配

    • 数组元素类型 数组名字[]

    • 数组元素类型[] 数组名字

    声明后不能立即访问 还需要分配内存空间 并且必须指明长度

    数组名 = new 数组元素类型[数组元素的个数]

  • 声明的同时为数组分配内存

    • 数组元素类型 数组名字[] = new 数组元素类型[数组元素的个数]

    • 数组元素类型[] 数组名字 = new 数组元素类型[数组元素的个数]

初始化一维数组

  • 为数组分配内存也算一种初始化 现在所有元素默认为0

  • 在new中初始化 eg int arr[] = new int[]{1, 2, 3, 4};

  • 省略new 直接初始化 eg int arr[] = {1, 2, 3, 4};

数组长度一旦定义无法改变

使用一维数组

for循环遍历

public class Java6_1_2 {
    public static void main(String[] args) {
        //创建一维数组
        //先声明 再用new运算符进行内存分配
        int arr[];
        int[] arr1;
        arr = new int[3];
        arr1 = new int[4];
        // 声明的同时为数组分配内存
        int arr2[] = new int[5];

        // 初始化一维数组
        int[] arr3 = new int[6];
        System.out.println(arr3[0]);
        int arr4[] = {1, 2, 3, 4};

        // 使用一维数组
        for (int i = 0; i<arr4.length; i++){
            System.out.println(arr4[i]);
        }
        for (int i : arr4){
            System.out.println(i);
        }
    }
}

6.3 二维数组的创建及使用

二维数组的创建

  • 先声明 再用new运算符进行内存分配

    • 数组元素类型 数组名字[][]

    • 数组元素类型[][] 数组名字

      对于高维数组 分配内存空间

      • 直接为每一维分配内存 eg a = new int[2][4]

      • 分别为每一维分配内存 eg a = new int[2][] a[0] = new int[2] a[1] = new int[3]

  • 声明的同时为数组分配内存

二维数组初始化

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

使用二维数组

public class Java6_3 {
    public static void main(String[] args) {
        int arr[][] = {{1, 2, 3}, {4, 5}};
        for (int i=0; i<arr.length; i++){
            for (int j=0; j<arr[i].length; j++){
                System.out.println(arr[i][j]);
            }
        }
        for (int[] i : arr){
            for (int j : i){
                System.out.println(j);
            }
        }
    }
}

6.4 数组的基本操作

要用到Arrays类

import java.util.Arrays;

遍历数组

前两节谢过了两种方法

  • for
  • foreach

填充替换数组元素

  • Arrays.fill(int[] a, int value)

    • a 要进行元素替换的数组

    • value 要存储进数组的值

  • Arrays.fill(int[] a, int fromIndex, int toIndex, int value)

    • a 要进行元素替换的数组

    • fromIndex 要使用指定值填充的第一个元素的索引(包括)

    • toIndex 要使用指定值填充的最后一个元素的索引(不包括)

    • value 要存储进数组的值

对数组进行排序

Arrays.sort() 升序排序

若是String类型则是按照字典顺序升序

复制数组

  • Arrays.copyOf(arr, int newLength)

  • Arrays.copyOfRange(arr, int formIndex, int toIndex)

数组查询

Arrays.binarySearch用二分法搜索

使用之前必须进行排序

  • Arrays.binarySearch(Object[] a, Object key)

    • a 要搜索的数组
    • key 要搜索的值
    • 返回索引
  • Arrays.binarySearch(Object[] a, int formIndex, int toIndex, Object key)

import java.util.Arrays;
public class Java6_4 {
    public static void main(String[] args) {
        // 填充替换数组元素
        int arr[] = {1, 2, 3, 4, 5};
        Arrays.fill(arr, 5);
        for (int i : arr) {
            System.out.print(i);
        }
        System.out.println("");
        Arrays.fill(arr, 2, 3, 1);
        for (int i : arr) {
            System.out.print(i);
        }
        System.out.println("");

        // 对数组进行排序
        Arrays.sort(arr);
        for (int i : arr) {
            System.out.print(i);
        }
        System.out.println("");

        // 复制数组
        int newArr[] = Arrays.copyOf(arr, 10);
        for (int i : newArr) {
            System.out.print(i);
        }
        System.out.println("");

        int newArr1[] = Arrays.copyOfRange(arr, 0, 3);
        for (int i : newArr1) {
            System.out.print(i);
        }
        System.out.println("");

        // 数组搜索
        System.out.println("1的索引为" + Arrays.binarySearch(arr, 1));
        // 结果是2 因为会返回第一找到的key的索引 binarySearch是二分法 故第一个找的位置是正中间
        System.out.println("1的索引为" + Arrays.binarySearch(arr, 5));
    }
}