Java基础学习(五)

Java基础学习(五):数组

本文为个人学习记录,内容学习自 狂神说Java黑马程序员


概念

  • 数组是相同类型数据的有序集合
  • 每个数据称为一个数组元素,可以通过下标来访问

声明与创建

  1. 数组的两种基本声明方法:

    数据类型[] 数组名;					// 推荐使用
    数据类型 数组名[];
    
  2. 数组的两种基本创建方法:

    数组名 = {数组内容};				// 创建时直接初始化
    数组名 = new 数据类型[数组长度];	// 创建时仅指定大小,元素被初始化为默认值,默认值规则和前面实例变量、类变量的规则一致
    
  3. 当然也可以一步完成数组的声明和创建:

    数据类型[] 数组名 = {数组内容};
    数据类型[] 数组名 = new 数据类型[数组长度];
    
  4. 数组的元素通过索引(下标)来访问,索引从 0 开始

  5. 获取数组长度 数组名.length


初始化

  • 静态初始化:手动指定数组元素,系统会根据元素个数计算数组长度

    int[] a = new int[] {1, 2};		// 完整形式
    int[] a = {1, 2};				// 简写形式
    
  • 动态初始化:手动指定数组长度,由系统给出默认初始化值

    int[] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    

基本特点

  • 数组一旦被创建,它的大小就是不可改变的
  • 数组中的元素必须是相同类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属于引用类型,数组也可以看成对象,数组中每个元素相当于该对象的成员变量

数组的地址

直接打印引用类型的变量,输出的是该引用类型的值,也是数组/对象的地址值

int[] a = new int[] {1, 2};
double[] b = {5, 6, 7};
System.out.println(a);				// 输出为 [I@1b6d3586,[ 表示数组,I 表示int类型,@ 为固定格式,剩下为地址值
System.out.println(b);				// 输出为 [D@4554617c,[ 表示数组,D 表示double类型,@ 为固定格式,剩下为地址值

内存分析

图5-1

举个创建数组的栗子:

  1. 当声明数组时,会在栈中为引用类型的变量 array 分配空间,用于存储数组的地址;
  2. 当创建数组时,会根据给定的数组大小在堆中分配空间,而地址由声明时栈中的变量 array 指出;
  3. 当对数组赋值时,将数值保存在堆中。
图5-2

应用

  1. 使用 增强for循环 遍历数组元素

    int[] array = {1, 2, 3, 4, 5};
    for (int i : array) {
        System.out.println(i);					// 打印数组中每一个元素
    }
    
  2. 数组作为实参形参

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        printArray(array);
    }
    public static void printArray(int[] array){
        for (int i : array){
            System.out.println(i);
        }
    }
    
  3. 数组作为返回值

    public static void main(String[] args) {
        int[] array = {1, 2, 3, 4, 5};
        int[] result = reverse(array);
        for (int i: result){
            System.out.println(i);
        }
    }
    public static int[] reverse(int[] array){
        int[] result = new int[array.length];
        for (int i = 0; i < array.length; i++){
            result[array.length - i -1] = array[i];
        }
        return result;
    }
    

多维数组

多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组

二维数组的声明和创建:

int[][] a = {{1, 2, 3, 4, 5}, {2, 3, 4, 5, 6}};
int[][] a = new int[2][5];

扩展内容

Arrays 类

数组对象本身并没有提供什么方法可以供我们调用,但 API 中提供了一个工具类 java.util.Arrays 供我们使用

  • 数组的工具类 java.util.Arrays
  • Arrays 类中的方法都是 static 修饰的 静态 方法,可以直接使用类名进行调用
  • 常用功能:
    • 给数组赋值:通过 fill 方法
    • 对数组排序:通过 sort 方法
    • 比较数组:通过 equals 方法比较数组中的元素是否相等
    • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找

示例一:采用 Arrays.toString 快速打印数组数据

import java.util.Arrays;

int[] a = {1, 2, 45, 63, 8};
System.out.println(Arrays.toString(a));				// 输出为 [1, 2, 45, 63, 8]

示例二:采用 Arrays.sort 进行升序排序

import java.util.Arrays;

int[] a = {1, 2, 45, 63, 8};
Arrays.sort(a);
System.out.println(Arrays.toString(a));				// 输出为 [1, 2, 8, 45, 63]

冒泡排序

总共有八大排序方法,而冒泡排序无疑是最为出名的排序算法之一

图5-3

冒泡排序的时间复杂度为 O(n²)

示例:一种简单的实现方法

public static void sort(int[] array){
    for (int i = 0; i < array.length - 1; i++){
        for (int j = 0; j < array.length - 1 - i; j++){
            if (array[j] > array[j+1]){
                int tmp = array[j];
                array[j] = array[j+1];
                array[j+1] = tmp;
            }
        }
    }
    System.out.println(Arrays.toString(array));
}

稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值时,可以使用稀疏数组来保存该数组
  • 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值,把具有不同值的元素值和行列记录在一个小规模的数组中,从而缩小程序的规模
  • 示例:下图左边是原始数组,右边是稀疏数组,其中稀疏数组的第一行记录了原始数组的总行列及不同值个数,其余行记录不同值的具体行列和数值
图5-3
posted @   victoria6013  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示