java:数组

一、数组是什么:

有序的数据序列,同一数组的数据类型是相同的。

数组为引用类型,数组型数据是对象。

二、一维数组

1、数组的定义

(1)、静态初始化:数据类型 []  数组名 = {变量0,变量1,变量2};

注:[]也可以写在数组名后,这种方法定义的数组长度根据后方变量的数量而定

(2)、动态初始化1:数据类型 [] 数组名 = new int[n]

表示创建一个长度为n的数组

(3)、动态初始化2:也可以先声明,在需要的时候再定义

声明时不分配内存,定义后再分配。

int[] array1 = {1, 2, 3, 4, 5};


int array1[] = {1, 2, 3, 4, 5};


int a = new int();

int a;   //此时还是空的
a= new int();

2、、数组的引用

数组的引用:array1[i] ,其中i是索引值,表示的是引用第i+1个变量

其中第一个变量索引值为0。

注:索引值又被称为下标。

3、length,长度属性

array1.length = 数组中的变量的数量。

public static void main(String[] args) {
		int[] array1 = new int[6];
		Scanner myScanner = new Scanner(System.in);//设立监听器

		for(int i = 0;i <= (array1.length - 1);i++) {//变量输入
			System.out.println("请输入数组的第"+i+"个变量:");
			array1[i] = myScanner.nextInt();
		}
		System.out.println("数组的各个变量为:");
		for(int i = 0;i <= 5;i++) {    //输出
			System.out.print(array1[i]+"\t");
		}
	}

三、数组的数值传递。

1、数组时引用类型数据,数组的数值传递传递的是数组的地址。即赋值时将数组的地址赋给另一个数组,赋值完后,两者共用一块地址。

 

2、用一个数组A给另一个数组B赋值:无论被赋值前的数组B是怎么样的,被赋值后都会被数组A同化

        int[] arr1 = {1, 2, 3, 4};
		int[] arr2 = new int[3];
		int[] arr3 = new int[3];
		int[] arr4 = new int[5];
		int[] arr5 = {1,2,3};
		arr3 = arr1;//若待赋值数组比原数组短
		arr4 = arr1;//若待赋值数组比原数组短,且已经被赋值
		arr5 = arr1;//若待赋值数组比原数组长
		System.out.println(arr2.length);//3
		System.out.println(arr3.length);//4
		System.out.println(arr4.length);//4
		System.out.println(arr5.length);//4
		/* 数组3,4,5分别是比数组1,短、短且已经被赋值,长,但输出的长度都一样。
		 * 以上说明,无论被赋值前的原数组是怎么样的,被赋值后都会被同化。
		 */

3、数组的赋值是将地址赋给其他数组,即上图中,赋值完后,arr1,arr3,arr4,arr5是同一个数组。

arr3[2] = 1;
		//此时的arr1,arr3,arr4,arr5是同一个数组。
		for(int i = 0; i <= 3; i++) {
			System.out.print(arr1[i]);
		}

4、数据拷贝,数据拷贝会产生一个新的数组,并给新的数组赋值一个新的地址。

        int[] arr1 = {1, 2, 3, 4};
		int[] arr2 = new int[4];
		for(int i = 0; i <= 3; i++) {
			arr2[i] = arr1[i];
		}

5、数组的扩容

		int[] arr1 = {1, 2, 3};
		int[] newarr = new int[4];
		
		for(int i = 0; i <= newarr.length - 2; i++) {
			newarr[i] = arr1[i];
		}
		newarr[3] = 4;
		arr1 = newarr;

四、二维数组

1、定义:数据类型[][] 数据名 = { {第一行的变量} , {第二行的变量} ,。。。 }

二维数组相当于一维数组的每一个数组都变成一个数组。

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

int[][] arr = new int[3][3]
//动态初始化

2、二维数组的引用

当引用二维数组的变量 arr[2][2]时,表示引用第3行,第3列的(从0开始)数值

        int[][] dimenArray = {{1, 2, 3}, 
				              {4, 5, 6}, 
				              {7, 8, 9}};
		
		System.out.println(dimenArray[2][2]);//9

3、二维数组的长度:

二维数组的长度“arr.length”表示的是二维数组的行数,即这个二维数组有多少个一维数组。

注:可以理解为二维数组的元素是一维数组,二维数组的元素个数是其中一维数组的个数。

                          “arr[i].length”表示二维数组的列数。

4、二维数组在计算机中的存储:

已知,一维数组存储的是一段引向堆栈的地址,那么二维数组是如何在计算机中存储的呢?

运行如下代码,我们发现,二维数组中的每一个一维的元素都是以一维数组的形式存在。所以我们可以认为,二维数组实际是对一维数组的嵌套。二维数组实质上是数据类型为“地址”(C语言中称之为指针)的一维数组。

    public static void main(String[] arg) {
		int[][] dimenArray = {{1, 2, 3}, //初始化二维数组
				              {4, 5, 6}, 
				              {7, 8, 9}};
		
		System.out.println(dimenArray[2][2]);//9
		
		int[] arr2 = dimenArray[1];  
        //将二维数组的一个一维数组赋值给一个一维数组
	    arr2[1]++;   //对一维数组中的一个元素进行操作
	    
	    System.out.println(dimenArray[1][1]);//6
        //结果影响到了二维数组。
	}

在Java中二维数组中的每一个一维数组相对独立性较强

 5、列数不等的数组

在“二维数组在计算机中的存储”中,我们已知二维数组的每一个一维数组都有很强的独立性,这个独立性也体现在二维数组的列数可以不相等上。

int[][] arr3 = new int[3][];// 
		for(int i=0;i<arr3.length;i++){//遍历arr每个一维数组
			arr3[i] = new int[i + 1];//遍历一维数组,并给一维数组的每个元素赋值 
			for(int j = 0; j <arr3[i].length; j++) {
				arr3[i][j] = i + j;
			}
		}
		for(int i=0;i<arr3.length;i++) {
			for(int j=0;j<arr3[i].length;j++) {
				System.out.print(arr3[i][j]+"\t");
				
			}
			System.out.print("\n");
		}

五、new

在JAVA里就是创建一个新的实例,或者说一个新的对象,一个普通类在没有实例化之前,就是new之前,它的属性,方法等等在内存中都是不存在的。只有使用new了以后,这个类的一些东西在内存中才会真的存在,也就是说只有new了之后,这个类才能用

int c = new int[2];意思就是说,把这个对象在内存中的地址 赋值 给数组c,这就是Java中引用概念,c就叫做引用,或者叫引用变量,或者直接叫变量,没问题,都是它;c的值就是一个内存地址,或者叫引用地址。

总结:java中的数组和C语言中的数组有很大差别,java中的变量更像C语言中的指针。存储时存储的是一个地址,指向存储数据的地址,如果是基本变量类型的变量则可以进行简单的运算。如果是引用变量类型则只能进行地址上的运算。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值