Java笔记整理 —— 数组细节、数组扩容

 数组细节

     1. 数组创建后,如果没有赋值,有默认值—— int,short,byte,long 为0。float,double为0.0。char为\u0000,String为null,boolean为false。

     2. 数组属引用类型,数组型数据是对象。

     3. 数组共有三种初始化方式,其中两种动态初始化,一种静态初始化。

//第一种是动态初始化
int[] a = new int[10];//当然也可以是 int a[] = new int[10];

//第二种也是动态初始化
int[] a;
a = new int[10];

//第三种是静态初始化
int[] a = {...};

    4. 数组赋值机制——值拷贝/值传递引用传递/地址拷贝 的区别:

  基本数据类型使用值拷贝,只把数值赋过去:

int n1 = 2;
int n2 = n1;//这里就是 值传递/值拷贝,只把数值传递过去
n2 = 10;//最终n2为10,n1为2

  数组在默认情况下使用引用传递,赋的值是地址:

int[] arr1 = {1,2,3};
int[] arr2 = arr1; //这里就是引用传递/地址拷贝
arr2[0] = 10; //arr1[0]同步修改为10

简朴的数组扩容方法

     整体思路:新建一个比原来数组大的数组,然后进行数组复制,把剩下的空位赋为想要的数字,然后让原来的数组指向新数组

public static void main(String[] args){
		Scanner judge = new Scanner(System.in);
	    int[] arr = {1,2,3,4,5};//原来的数组
	    char h;
	    do {
	    	System.out.println("请输入要添加的数字:");
	    	int t = judge.nextInt();//输入要添加的数字
	    	int[] arrNew = new int[arr.length + 1];//新建一个较大的数组
	    	arrNew[arr.length] = t;//把要添加的数组赋给多余位置
	    	for(int i = 0 ;i < arr.length ; i++) {
	    		arrNew[i] = arr[i];//进行数组的复制
	    	}
	    	arr = arrNew;//最关键的一步,让旧数组指向新数组
	    	for(int i = 0;i < arr.length;i++) {
	    		System.out.print(arr[i] + " ");
	    	}
	    	System.out.println();
	    	System.out.println("是否要继续输入?");
	    	h = judge.next().charAt(0);
	    }while(h == 'y');//可以控制无限循环
	}

 核心代码: 

	    	int[] arrNew = new int[arr.length + 1];//新建一个较大的数组
	    	arrNew[arr.length] = t;//把要添加的数组赋给多余位置
	    	for(int i = 0 ;i < arr.length ; i++) {
	    		arrNew[i] = arr[i];//进行数组的复制
	    	}
	    	arr = arrNew;//最关键的一步,让旧数组指向新数组

  结果展示:

数组缩减也是同理,只不过要判断一下是否内容为空。

二维数组

内存示意图

        int arr[][] = new int[2][3];
        arr[1][1] = 8;

二维数组初始化

 1. 与一维数组类似的初始化方法:

//第一种动态初始化方法
int arr[][] = new int[2][3];//int[][] arr = new int[2][3];也可以  
                            //int[] arr[] = new int[2][3];也可以

//第二种动态初始化方法
int arr[][];
arr = new int[2][3];

//静态初始化方法
int arr[][] = {{1,1,1,},{2,3,4},{5,6,7},{9}};

  2. 列数不确定的初始化方法:

		int arr[][] = new int[3][];//不确定列数的初始化方法
		for (int i = 0; i < 3; i++) {
			arr[i] = new int[i + 1]; //列数不确定,要分配对应的空间
			for (int j = 0; j < i + 1; j++) {
				arr[i][j] = j + 1;  //给数组赋内容
			} 
		}

  二维数组实际上是由多个一维数组组成的,它的各个一维数组长度可以相同也可以不同。arr[i]相当于第i个数组,arr.length得到总共有多少个数组(行),而arr[i].length得出第i个数组(第i行)共有多少个元素,由于列数是不确定的,因此要单独给每一列分配空间

 两个细节:

int[] x,y[];  //这里x是一维数组,y是二维数组
        String strs[] = new String{"a","b","c"}; //报错,错误使用构造
        String strs[] = new String[]{"a","b","c"}; //正确
        String strs[] = new String[3]{"a","b","c"}; //报错,动态分配和静态分配不能在一起

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值