JavaSE入门:引用数据类型——数组

数组

定义

数组可以看作一个容器,它存储的是相同数据类型的数据;也就是存储连续内存空间的集合;它是最基本的数据结构。

数组分类

数组分为一维,二维和多维,这里主要介绍一维和二维

数组声明

  • 一维数组
    - 静态声明
int[] arr1= {1,2,3};
		byte[] arr2= {2,2,3,4};
		boolean[] arr3= {true,false,true};
		char[] arr4= {'a','b','4'};
		System.out.println(arr1.length);
		System.out.println(arr2.length);
		System.out.println(arr3.length);
		System.out.println(arr4.length);
	- 动态声明    
	语法结构 : 数据类型[] 变量名 = new 数据类型[长度];
//		动态声明
		int[] arr5 =new int[5];
		System.out.println(arr5.length);
//     [] 也可以放在变量名后面,但是不建议这样写
//				int arr6[] = {1,2,2,2,1};
	}

  • 二维数组
    - 静态声明
//		静态二维数组
		int[][] a= {
				{1,2,3,4,5},
				{11,12,13,14,15},
				{21,22,23},
				{31,45}
				};
	 - 动态声明
//		动态二维数组
		//		同理第一个中括号内是二维内一维数组个数  而二个括号内是一维数组内数值个数,
		int[][] b=new int[3][3];
					//		第二个中括号可以不填,如果一维数组内个数都不同,单独定义,而可以填一个大多数的,定义更改那少数
		b[1]=new int[2];
		int[][] c=new int[3][];
		c[0]= new int[5];
		c[1]=new int[4];
		c[2]=new int[6];

注意: 动态声明刚申明的时候是有默认值占着位置的
*整数 0
*小数 0.0
*布尔 false
*字符 \u0000
*引用 null

操作与遍历

查询与更改

  • 一维数组
/*
 * 下标从0开始
 * length属性是数组的长度
 */
	public static void main(String[] args) {
		int[] arr1 = {88,97,322131233};
//		第一个元素   默认重0开始
//		查询
		System.out.println(arr1[0]);
		System.out.println(arr1[1]);
//	    更改
		arr1[0] =98;
		System.out.println(arr1[0]);
//		就相当于查询数组中最后一个数
		System.out.println(arr1[arr1.length-1]);
//		 超出数组个数上限     下标异常   java.lang.ArrayIndexOutOfBoundsException: 3
//		 System.out.println(arr1[3]);
		System.out.println("-------------------");
  • 二维数组
		//取第一个数组的第一个
		int[] a1=a[0];
		int a2=a1[0];
		System.out.println(a2);
		//等价于
		System.out.println(a[0][0]);

遍历

  • 一维数组
//		遍历   普通for循环
		for(int i=0;i < arr1.length;i++) {
			System.out.println(arr1[i]);
		}
		System.out.println("-------------------");
//		 遍历   增强for循环  for(该数组的数据类型   符合类型的变量:数组名)
		for (int i:arr1) {
			System.out.println(i);
		}

  • 二维数组
		int[][] b=new int[3][3];
//		加强for循环
		for ( int[] i: b) {
			for(int j:i) {
				System.out.print(j+"  ");
			}
			System.out.println();
		}

数组复制

System类中提供了一个复制数组的方法 arraycopy

结构: arraycopy(原数组名,原数组起始下标,目标数组名,目标起始下标,复制个数)

注意: arraycopy的起始位置下标是包含关系

一个复制直接到另一个中(替换复制):

//		定义两个数组   src原数组   dest目标数组
		int[] src= {1,2,3,4,5,6};
		int[] dest= {11,12,13,14,15,16};
//		system类中提供的方法
//		System.arraycopy(src, 2, dest, 3, 2);
		arraycopy(src, 2, dest, 3, 2);
		for(int i:dest) {
			System.out.println(i);
		}
	}

两个数组合并(插入复制)

//	2 确定两个操作数组   
		int[] src= {1,2,3,4,5,6,7,8,9};
		int[] dest= {11,12,13,14,15,16,17,18,19};
//		调用
		int[] newDest = arraycopy(src, 2, dest, 8, 3);
		for (int i : newDest) {
			System.out.print(i+",");
		}
	}
//	1 先确定一个方法 用于调用
	public static int[] arraycopy(int[] src, int srcPos, int[] dest,int destPos, int length) {
//	3	声明第三个数组,也是用来返回的
		int[] newDest=new int[dest.length+length];
//	4	目标数组插入下标前的   复制到newdest
			for(int i=0;i<=destPos;i++) {
				newDest[i]=dest[i];
			}
//	5  原数组需要复制数据复制到newdest后面
			//
			int a=destPos;
			for(int i=1;i<=length;i++) {
				a++;
				newDest[a]=src[srcPos];
				srcPos++;
			}
//	6   目标数组插入之后剩下的数插入newdest
			for(int i=destPos+1;i<dest.length;i++) {
				a++;
				newDest[a]=dest[i];
			}
			return newDest;
	}

猜你喜欢

转载自blog.csdn.net/lfz9696/article/details/107741908