Java-SE Java的内置工具类-数组

数组

数组在各种语言中都是使用频率比较高的数据结构,数组在Java中是类,这与C语言中有很大不同。下面我们来看看Java中一维数组与二维数组。

1、一维数组

Java中一维数组的生成方式有两种,一是在{}内直接写元素,另一种是new 数据类型 (元素数量)。这两种方式均可以得到一个数组,如下:

    int[] arr = {4,3,2,1};//直接定义数组元素
    System.out.println(arr.getClass());
	long[] brr = new long[10]; //new 一个数组,初值为0 
    System.out.println(brr.getClass());   		  
    Complex[] crr = new Complex[10];//非八大基本类型的数组,数组无初值,结果为null
	System.out.println(crr.getClass());

输出得到:

一维数组的类型为"class[" + "元素类名"。常见的几个类型对象的类名如下:int -> I;double -> D;long -> J。

当初始化了一个数组之后,不进行其他操作,数组的初值是多少呢?

for(int i = 0; i<crr.length; i++) {
			System.out.print(crr[i] + " ");
		}
		System.out.println();
		for(int i = 0; i<arr.length; i++) {
			System.out.print(arr[i] + " ");
		}
		System.out.println();
		
		for(int i = 0; i<brr.length; i++) {
			System.out.print(brr[i] + " ");
		}
		System.out.println();

 结果如下:

八大基本类型仅仅new一个对象的话JVM会赋初值为0,其他类的元素的数组无初值,输出结果为null。

2、浅克隆

        在一维数组中存在一个clone()方法,这个方法可以克隆一个数组如下:

for(int i = 0; i<crr.length; i++) {
			crr[i] = new Complex(i, i+1);
			System.out.print(crr[i] + " ");
		}
		Complex[] cloneCrr = crr.clone();//clone克隆
		for(int i = 0; i<cloneCrr.length; i++) {
			System.out.print(cloneCrr[i] + " ");
		}

 结果如上,但这个克隆方法存在一点问题,当我们改变克隆后的数组中的某一个元素时,原数组的元素应该不变,但结果不尽人意:

 修改克隆得到的数组的某个元素的值之后原数组也发生了变化,说明这个克隆并不是真正意义上的克隆,在Java中称为浅克隆!浅克隆的意思是并不是克隆了元素的值,而是仅仅克隆了元素的首地址,即当我们访问克隆的数组里的元素空间时,最终访问到的依旧是原数组的元素空间!所以改变克隆的数组时,原数组也是会随之改变。

3、二维数组

         二维数组类似于一维数组,即二维数组是元素为一维数组的一维数组!初始化方式也有两种,直接输入元素的值或new一个二维数组。但二维数组初始化时必须有行数初值,例如:int[][] m4 = new int[][3];编译时会出现错误,不允许无行数的二维数组!二维数组的类型也与一维数组差不多,为“class [[” +类型名。测试代码如下:

int [][] m1= {//初始输入多少为多少,数组长度为行数
				{1,2,5,4},
				{2,4,7},
				{1,8,6,7,2},
			  {1,5}
		};
		System.out.println("m1.length: " + m1.length);
		for (int row = 0; row < m1.length; row++) {
			for (int col = 0; col < m1[row].length; col++) {//m1[row].length 即二维数组的一个元素(一维数组)的长度
//				System.out.print("m1[row].length: " +  m1[row].length );
				System.out.print(m1[row][col] + " ");
			}
			System.out.println();
		}
		System.out.println(m1.getClass());//二维数组的类型为 [[I
		int[][] m2 = new int[3][];
//		int[][] m4 = new int[][3];错误实例
		long[][] m3 = new long[3][4];
		for (int i = 0; i < m2.length; i++) {
			m2[i] = new int[i+4];
		}
		for (int row = 0; row < m3.length; row++) {
			for (int col = 0; col < m3[row].length; col++) {
				System.out.print(m3[row][col] + " ");
			}
			System.out.println();
		}

        二维数组初始输入多少为多少,数组长度为行数,即m1.length结果为行数,二维数组的一个元素(一维数组)的长度为这一行的里面的元素个数,即:m1[row].length。和一维数组一样,八大基本类型仅仅new一个对象的话JVM会赋初值为0。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值