Java基本知识(数组、数组扩容、引用类型的数组)

数组

(一)

最基本的一种数据结构 — 数据的排列方式, 数组是第一种引用类型
基本数据类型: byte\short\int\long\float\double\char\boolean

数组的初始化

  1. 数组的类型是固定的, 只能存相同类型的数据
  2. 数组一旦确定, 数组的长度是不可变的:arr.length
  3. 数组元素: 通过下标/索引 index
    index范围: 0 ~ length-1
  4. 访问\赋值:arr[index]
  5. 数组遍历/迭代: for循环
        // 数组的声明
        int[] arr;
        // 数组的初始化: 一共3种方式
        // 方式一: 在声明的同时初始化, 已经确定数组内容
        int[] arr1 = {1, 2, 3, 4};
        // 不能使用方式一再次赋值
//        arr1 = {2, 3, 4, 5}; // 编译错误

        // 方式二: 在声明的同时初始化, 已经确定数组内容
        int[] arr2 = new int[]{1, 2, 3, 4, 5};
        // 使用方式二可以再次赋值
        arr2 = new int[]{3, 4, 5, 6, 7, 8, 9};

        // 方式三: 在声明的同时初始化, 只能确定长度, 内容全部都是默认值
        // 默认值: 整数-0, 浮点-0.0, char-\u0000, boolean-false
        int[] arr3 = new int[5];

直接输出数组名是地址

System.out.println(arr);// [I@2471cca7 -> 地址

(二)

// int 类型的数组arr
int[] arr = new int[3];
// arr[0] -- int类型
//定义一个 int[] 类型的数组a, 数组长度是4
//a中第一个元素有5个元素
//a中第二个元素有3个元素
//a中第三个元素有6个元素, 其中第3个是 2

int[][] a = new int[4][];
// a[0] --> int[] 类型
a[0] = new int[5];
a[1] = new int[3];
a[2] = new int[6];
// a[2] 表示一个int数组
// a[2][2] 表示一个int数
a[2][2] = 2;
// 二维数组: 数组中存数组
//定义一个 int[] 类型的数组b, 数组长度是3
//b中的每一个元素, 都有4个元素
//b中的第2个元素的第4个元素, 是 5
//b中的每一个元素都是5

int[][] b = new int[3][4];
b[1][3] = 5;
for (int i = 0; i < b.length; i++) {
    for (int j = 0; j < b[i].length; j++){
        b[i][j] = 5;
    }
}
/*for(int i = 0; i < b.length; i++) {
    b[i] = new int[4];
}*/

数组扩容

  1. 创建新的数组
  2. 将原来的元素复制到新数组中

void System.arraycopy

// 需求: 让arr变成 {1,2,3,4,5,6}
int[] arr = {1,2,3,4,5};
// 1.数组扩容
int[] b = new int[arr.length+1];
// 2.数组复制
/*
    参数1: 要复制的数组 - 源数组
    参数2: 从要源数组的哪个位置开始复制
    参数3: 要复制到哪个数组中 - 目标数组
    参数4: 要从b数组的哪个位置开始存放值
    参数5: 要复制几个元素
 */
System.arraycopy(arr, 0, b, 0, arr.length);
// 3.再最后加一个6
b[b.length - 1] = 6;
// 4.将arr替换
arr = b;

有返回值 Arrays.copyOf

// 需求: 让arr变成 {1,2,3,4,5,6}
int[] arr = {1,2,3,4,5};
// 参数1: 要复制的数组 -> 源数组
// 参数2: 要生成的新数组的长度
// 返回值: 生成的新数组
arr = Arrays.copyOf(arr, arr.length + 1);
arr[arr.length - 1] = 6;

引用类型的数组

  1. 给数组初始化
Student[] ss = new Student[5]; // 默认值都是null
  1. 给数组元素初始化
 ss[0] = new Student();      
 ss[1] = new Student();     
 ...

常见问题
NullPointerException: 空指针异常
产生原因: 调用了null空对象的 成员变量 或者 方法

        // 引用类型数组
        // 默认值 null
        Student[] arr = new Student[3];
        System.out.println(arr[0]); // null
        // 要给第一个student对象, 修改name值为 "小俊"
        //arr[0].name = "小俊"; //error
        arr[0] = new Student("小明", 21, null);
        arr[0].name = "小俊";
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值