数组,二维数组,数组排序,Arrays的常用方法

java 核心基础 2.26

数组

数组是一个用于存放大量相同数据类型的集合

数组基本要素
  • 数组名称
  • 数组下标
  • 元素类型
  • 数据元素

数组中的每一个元素都可以通过下标去访问到相应的数据,数组中的每一个元素的元素类型必须相同

如何使用数组

声明数组 分配内存空间 给数组赋值 使用数组

示例代码:

//声明数组
int[] array;
//分配内存空间
array =  new int[4];
//数组赋值
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
//使用数组
for (int i = 0; i < array.length; i++) {
    System.out.println(array[i]);
}

相关的JMM图例:

image-20250227114216302

常见的错误
  • 元素类型不匹配

array是int类型的数组,而array[2]赋值的字符串类型

image-20250227114635051

  • 数组下标越界异常,数组下标最长为 数组长度-1
//声明数组
int[] array;
//分配内存空间
array =  new int[4];
//数组赋值
array[0] = 1;
array[1] = 2;
array[2] = 3;
array[3] = 4;
System.out.println(array[5]);

抛出数组越界异常ArrayIndexOutOfBoundsException

image-20250227115022804

数组常用操作和方法

1、求数组中的最大值

代码:

int[] arr = {10, 2, 49, 89, 9};
int max=arr[0];
for (int i = 1; i < arr.length; i++){
    if(max<arr[i])
        max=arr[i];
}
System.out.println(max);

2、求数组中的最小值

代码:

int[] arr = {10, 2, 49, 89, 9};
int min=arr[0];
for (int i = 1; i < arr.length; i++){
    if(min>arr[i])
        min=arr[i];
}
System.out.println(min);

3、在数组的指定位置插入一个数据

代码:

int[] arr = {10, 2, 49, 89, 9};
//插入99到arr的第三个元素中
int[] newArr =new int[arr.length+1];
for (int i = 0; i < arr.length; i++) {
    newArr[i] = arr[i];
}
newArr[3] = 99;
System.out.println("======================================");
System.out.println(Arrays.toString(arr));
System.out.println(Arrays.toString(newArr));

输出:

image-20250227152931009

4、数组排序

代码:

int[] arr = {10, 2, 49, 89, 9};
//数组排序(冒泡排序,升序排列)
for (int j = 0; j < arr.length - 1; j++) {
    for (int i = 0; i < arr.length -1 - j; i++) {
        if(arr[i] > arr[i+1]) {
            int temp = arr[i];
            arr[i] = arr[i + 1];
            arr[i + 1] = temp;
        }
    }
}
System.out.println(Arrays.toString(arr));

Arrays.toString()源码实现,可以借鉴学习一下编程思想

public static String toString(int[] a) {
    if (a == null)
        return "null";
    int iMax = a.length - 1;
    if (iMax == -1)
        return "[]";

    StringBuilder b = new StringBuilder();
    b.append('[');
    for (int i = 0; ; i++) {
        b.append(a[i]);
        if (i == iMax)
            return b.append(']').toString();
        b.append(", ");
    }
}

StringBuilder比String 的效率高

Arrays 是 JDK 提供的一个工具类,专门用来操作数组,通过调用该工具类的方法即可完成对数组的操作,存储在 java.util 包中

Arrays的常用方法

  • Arrays.toString(arr1) 输出
  • Arrays.equals(arr1, arr2) 比较两个数组是否相等
  • Arrays.copyOf(arr1, 10) 创建一个新数组,并将原数组中的元素复制到新数组中,并规定长度
  • Arrays.copyOfRange(arr1, 0, 3) 创建一个新数组,并将原数组的前3个元素复制到新数组中
int[] arr1 = {10, 2, 49, 89, 9};
int[] arr2 = {10, 2, 49, 89, 9};
int[] arr3 = {11, 22, 33, 44};
// 比较两个数组是否相等
System.out.println(Arrays.equals(arr1, arr2));
// 对数组进行排序
Arrays.sort(arr1);
System.out.println(Arrays.toString(arr1));
// 创建一个新数组,并将原数组中的元素复制到新数组中
int[] arr4 = Arrays.copyOf(arr1, 10);
System.out.println(Arrays.toString(arr4));
// 创建一个新数组,并将原数组的前3个元素复制到新数组中
int[] arr5 = Arrays.copyOfRange(arr1, 0, 3);
System.out.println(Arrays.toString(arr5));

输出:

image-20250227155607411

二维数组

JMM 内存模型

image-20250227160950238

二维数组的使用

声明 开辟内存空间 赋值 使用

int[][] arr;
arr = new int[3][3];
arr[0][0] = 1;
arr[0][1] = 2;
arr[0][2] = 3;
arr[1][0] = 4;
arr[1][1] = 5;
arr[1][2] = 6;
arr[2][0] = 7;
arr[2][1] = 8;
arr[2][2] = 9;
for (int[] ints : arr) {
    for (int anInt : ints) {
        System.out.print(anInt + " ");
    }
    System.out.println();
}
//声明式赋值
int[][] arr2 = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
System.out.println(Arrays.deepToString(arr2));

Arrays.deepToString(arr2) :Arrays工具类里面的方法,可以用来输出二维数组的值

例子:超市卖鸡蛋的货柜分为上、中、下 3 层,每层又分为 6 个格挡,每个格挡中的鸡蛋个数为层数*格挡数,比如第1层的第3个格挡中有1 * 3 = 3个鸡蛋,第3层的第6个格挡中有3 * 6 = 18个鸡蛋,要求按照此规律使用二维数组来装载所有的鸡蛋并求出总数量。

代码:

int[][] arr = new int[3][6];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
    System.out.println("第" + (i + 1) + "层货架:");
    for (int j = 0; j < arr[i].length; j++) {
        arr[i][j] = (i + 1) * (j + 1);
        System.out.println("第"+(j+1)+"个鸡蛋:"+arr[i][j]);
        sum += arr[i][j];
    }
    System.out.println();
}
System.out.println("总的鸡蛋数量为:" + sum);

arr.length :3,代表存放了三个数组的首地址,所以长度为3

arr[i].length :代表自己数组的长度,所以长度为6

输出:

总的鸡蛋数量为:126

面向对象

面向对象是一种编程思想,java主要就是面向对象的编程语言

万物皆可对象,程序员不需要对象,自己new一个就行了,可以把程序中的所有角色都看成一个对象

面向对象和面向过程的区分
  • 面向对象

    面向对象注重的是整个事情的模块化思想

    核心思想是 重用性 和 灵活性 (可扩展性和变化性)

    重用性是指 某个写好的程序可以在多个业务模块中反复使用

  • 面向过程

    面向过程注重的是整个事情的每一个步骤

posted @ 2025-02-27 16:50  述雾学java  阅读(4)  评论(0)    收藏  举报  来源