数组“扩容”

数组“扩容”

1.定义完成的数组是不能在该数组的基础上进行扩容的,因为数组长度定义后不能改变
数组“扩容”实际上指的是复制原数组,创建一个新的数组副本,并定义其长度,这样就实现了字面意义上的扩容。

public class T2 {
    public static void main(String[] args) {
        int[] arr = new int[2];
        System.out.println(arr);
        System.out.println(Arrays.toString(arr));
        //括号里的参数是原数组名称和新数组的长度
        arr = Arrays.copyOf(arr,4);
        System.out.println(arr);
        arr[2] = 1;
        arr[3] = 2;
        System.out.println(Arrays.toString(arr));
    }
}

输出结果为:

[I@1b6d3586
[0, 0]
[I@4554617c
[0, 0, 1, 2]

由结果可知,引用arr指向的地址发生了改变。因此数组“扩容”的本质是创建新数组,在堆内存开辟新的空间。
方法copyOf()源码如下

public static int[] copyOf(int[] original, int newLength) {
        int[] copy = new int[newLength];
        System.arraycopy(original, 0, copy, 0,
                         Math.min(original.length, newLength));
        return copy;
    }

2.相关案例
实现功能:最初数组里只有元素“你好”,请利用数组扩容实现可以无限次输入内容并打印出数组里的内容,输入为空时程序结束。

public class T3 {
    public static void main(String[] args) {
        String[] s = {"你好"};
        Scanner sc = new Scanner(System.in);
        while (true){
            System.out.println("请输入内容:");
            String s1 = sc.nextLine();
            if ("".equals(s1)){
                break;
            }
            s = Arrays.copyOf(s,s.length+1);
            s[s.length-1] = s1;
            System.out.println(Arrays.toString(s));
        }
    }
}

运行结果:

请输入内容:
小明
[你好, 小明]
请输入内容:
小红
[你好, 小明, 小红]
请输入内容:
小兰
[你好, 小明, 小红, 小兰]
请输入内容:


Process finished with exit code 0
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值