学习笔记:JAVA的数组(Array)

数组Array

1、概述
数组是同一类型数据的集合
数组是一个对象
数组包含元素,即数组中存放的数据,这些数据可以是任意类型(基本或引用),但同一数组只能保存同一类型的数据
声明数组并没有创建对象,还是要new创建对象
数组是在别的类型的基础上加[ ]形成的新类型

2、声明数组类型变量
数组类型就是基本数据类型或引用数据类型加[]
例如:

int[] a;	
byte[] b;
String[] str;
Student[] stu;

注:数组类型的变量将来要指向对象

3、创建(new)数组对象
1)数组对象的长度
数组的长度是指一个数组对象中可以存放多少个数据(元素)。
每一个数组对象在被创建的时候,就需要指明其长度是多少,并且该长度一旦确定的就不能再做修改。

2)数组对象的创建
使用new关键字
例如:

int[] a=new int[4];//4表示数组长度
byte[] b=new byte[3];
String[] str=new String[2];
Student[] stu=new Student[5];

3)数组对象的长度 length属性
数组对象访问length属性,查看数组长度;对象数组创建后长度就不能改变了
例如:

int[] a=new int[4];
System.out.println(a.length);//输出:4

4、数组对象的初始化和使用
1)数组在堆内存中是一块连续的内存空间,这里存放多个类型相同的数据

2)数组对象每个元素的默认值和声明该数组的原类型的默认值相同
例如:

int[] a=new int[4];
//没有赋值的话a数组打印出来是:[0 0 0 0]

整型数组的默认值是 0
浮点型数组的默认值是 0.0
布尔类型数组的默认值是 false
字符类型数组的默认值是 0
引用类型数组的默认值是 null

3)数组对象元素位置的下标
数组对象再堆区是一块连续的内存空间,我们可以通过连续的下标值找到,找到每一个可以存放元素的位置

注:下标从0开始到数组的length-1
例如:

int[] a=new int[4];
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
输出结果:
0
0
0
0

4)使用下标对数组进行赋值初始化
例如:

String [] str=new String[3];
str[0]="hello1";
str[1]="hello2";
str[2]="hello3";
for(int i=0;i<str.length;i++){
	System.out.println(str[i]);
}
输出结果:
hello1
hello2
hello3

5)其他的赋值形式

//编译通过
	int[] a1 = new int[]{1,3,5,7,9};
	System.out.println(a1.length);//5
	
	//编译通过
	int[] a2 = {2,4,6,8};
	System.out.println(a2.length);//4
	
	//编译通过
	int[] a4;
	a4 = new int[]{1,2,3};
	System.out.println(a4.length);//3
	
	/*下面俩种情况是错误的创建方式*/

	//编译报错
	int[] a3 = new int[3]{1,2,3};
	
	//编译报错
	int[] a4;
	a4 = {1,2,3};

6)数组下标越界
数组的下标为0到数组的length-1;若超过这个值就会报错
例如:

int[] a = new int[4];
	a[4] = 10;
	
	运行后结果:
	Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
		at com.briup.test.ArrayTest.main(ArrayTest.java:7)
		
数组下标越界:ArrayIndexOutOfBoundsException

5、数组拷贝
方法1:
java.lang.System类提供了arraycopy方法
System.arraycopy();

这个方法是一个五参的方法:
public static void arraycopy(Object src, int srcPos, Object dest, int destPos,int length)
第一个参数被复制数组
第二个参数从哪里开始复制,
第三个参数需要复制到的新的数组
第四个参数 复制到新数组的哪个位置开始
第五个参数被复制数组的长度
例如:

//写一个方法,接收一个数组对象,把这个数组对象的长度扩大到原来的2倍并返回。
		public int[] test(int[] a){
			int[] b = new int[a.length*2];
			System.arraycopy(a, 0, b, 0, a.length);
			return b;
		}

方法2:
数组的工具类java.util.Arrays类中的copyOf方法;复制或者截取指定数组并返回
Arrays.copyOf(参数1,参数2)
参数1:被复制的数组
参数2:复制后的数组长度

例如:

			//将a数组长度扩大两倍
				int[] a = {1,3,5,7};
				a = Arrays.copyOf(a, a.length*2);
				System.out.println(Arrays.toString(a));
			//输出结果:
			 [1, 3, 5, 7, 0, 0, 0, 0]

6、数组的工具类Arrays类(java.util包下)
注:Arrays中方法都是static修饰的静态方法,是随类加载的,直接用类名调用
例如:Arrays.copyOf()
Arrays类中常用的方法:
toString方法,把数组转换位字符串形式并返回
例如:

	int[] a=new int[]{1,2,3};
	System.out.println(Arrays.toString(a));
	//输出结果:
	[1 2 3]

binarySearch方法,在数组中查找指定元素并返回其下标

	例如:
	int[] a=new int[]{1,2,3};
	System.out.println(Arrays.binarySearch(a,2));
	//输出结果:
	3

copyOf方法,复制或者截取指定数组并返回
注:例子在上面数组拷贝中有

asList方法,可以把数组转换为List集合。
例如:

	int[] a=new int[]{1,2,3};
	List list=Arrays.asList(a);

sort方法,把数据中的元素进行排序
例如:

	int[] a=new int[]{1,4,3,2};
	Arrays.sort(a);
	System.out.println(Arrays.toString(a));
	//输出结果:
	[1 2 3 4]

fill方法,用指定值去填充数组对象
例如:

	int[] a=new int[]{1,2,3};
	Arrays.fill(a,6);
	System.out.println(Arrays.toString(a));
	//输出结果:
	[6 6 6]

7、二维数组
1)概念
int[] a;一维数组、

int[][] b;一个一维数组类型加[],生成二维数组 ;存放该一维数组类型的内存地址值,要一位数组地址值,在该地址值下的一维数组找数据。

二维数组可以用来表示坐标

2). 赋值 new对象

1) int[][] a= new int[2][]; 前面括号[]表示二维数组可以存几个一维数组,后面[]表示一维数组

2)    int[][] a=new int[2][3]; 等同于 int[][] a=new int[2][];
                a[0]=new int[2];//a[0]存放一个长度为2的一维数组地址值
			    a[1]=new int[3];//a[1]存放一个长度为3的一维数组地址值

3)int[2]={1,2} 则a[0][0]=1 , a[0][1]=2; 

int[][] d=new int[2][]表示:
int[][] d={
{一维数组}
{一维数组}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值