Java学习笔记_07 数组

何为数组?

数组是一种数据结构,用来存放同一类型元素的集合。

如何使用数组?

首先需要进行声明,告知编译器你想使用什么数据类型的数组?数组的名称又是什么?

声明数组:语法结构: 数据类型 [] 数组名;
				  	   int  []  arr;
注意:声明数组时没有开辟存储空间

如何创建数组?

有两种方式:静态、动态创建。

静态创建数组:

创建数组的同时,开辟了存储空间,且给存储空间赋值。

int [] arr = {1,2,3,4,5};
下面一个小Demo,介绍了如何访问数组元素、获取数组长度、对每个数组元素进行操作、输出整个数组。
public class ArrayDemo01 {
	public static void main(String[] args) {
		// 静态创建数组
		int [] arr = {1,2,3,4,5,5};
		//如何访问数组中的元素?	数组名[元素下标]
		
		//在Java中,数组的元素通过下标来表示,下标从0开始。	
		int length = arr.length;
		System.out.println("当前数组的长度为:"+ length);
		System.out.println(arr[arr.length - 1]);
		//输出数组最后一个元素
		
		//将数组arr中的所有元素,都变成6
		for(int i = 0; i < arr.length;i ++){
			arr[i] = 6;
		}
		System.out.println(arr);//指向数组所在的地址
		//如何输出数组
		System.out.println(Arrays.toString(arr));
	}
}

输出结果:

当前数组的长度为:6
5
[I@de6ced
[6, 6, 6, 6, 6, 6]

在进行输出数组的操作时,我们可以选择使用Arrays类中的方法来实现输出整个数组的操作,具体代码如下:

Arrays下方出现了波浪线?别慌!将鼠标移上去。

在这里插入图片描述
点它!
在这里插入图片描述

你会惊喜的发现,在第三行多出了一行代码。这便完成了一次导包操作。我们需要的Arrays类的实现代码,封装在了java.util.Arrays这个包里面,所以在需要使用Arrays类时,需要先导包。不然在执行代码的时候,JVM会迷路的。

Arrays类:是针对数组进行操作的工具类。提供了排序,查找等功能。需要进行导包操作。

动态创建数组:

与静态创建不同的是,动态创建只定义了数组长度,而并未进行赋值。

数据类型 [] 数组名 = new 数据类型[数组长度]
     int [] arr  = new int [5];
public class ArrayDemo02 {
	public static void main(String[] args) {
		int [] arr = new int[5];
		System.out.println(arr.length);
		System.out.println(Arrays.toString(arr));//动态创建数组,未进行赋值,默认为0。
	}
}

运行结果:

5
[0, 0, 0, 0, 0]

数组的复制:

1.假复制

假如有两个数组arr和arr1。所谓假复制,就是将arr1的地址赋给了arr,以至于arr和arr1的地址是一样的。也就是说,arr和arr1本质上是一个数组,只是多了个名字而已。
所以,当arr中数组元素要是发生变化的话,你会发现在arr1也发生了同样的变化。

public class T {
	public static void main(String[] args) {
		int [] arr = {1,2,3,4,5};
		int [] arr1;
		arr1 = arr;//假复制!arr数据的地址指向了arr1
		System.out.println(Arrays.toString(arr1));
		System.out.println(arr);
		System.out.println(arr1);
		arr[0] = 8;		
		System.out.println(Arrays.toString(arr1));
	}
}
[1, 2, 3, 4, 5]
[I@de6ced
[I@de6ced
[8, 2, 3, 4, 5]

2.数组元素的复制

System.arraycopy(源数组 ,源数组的起始位置 ,目标数组 ,目标数组的起始位置,复制的元素个数);
import java.util.Arrays;

public class ArrayDemo03 {
	public static void main(String[] args) {
		int [] arr = {1,2,3,4,5};
		//数组元素的复制
		int [] arr2 = new int [8];
		//			      源数组  源数组的起始位置  目标数组  目标数组的起始位置	复制的元素个数
		System.arraycopy(arr,       0,		     arr2,          	2		 ,  	  	  3);
		
		System.out.println(Arrays.toString(arr2));
		arr[0] = 8;
		
		System.out.println(Arrays.toString(arr2));
		}
	}

运行结果:

[0, 0, 1, 2, 3, 0, 0, 0]
[0, 0, 1, 2, 3, 0, 0, 0]

3.数组的复制

Arrays.copyOf(源数组, 长度); 其中,长度是新数组的长度。
public class ArrayDemo01 {
	public static void main(String[] args) {
		int [] arr = {1,2,3,4,5};
		int [] arr1 = new int [arr.length];
		System.arraycopy(arr, 0, arr1, 0, arr.length);//将arr复制给arr1
		System.out.println(Arrays.toString(arr1));	
		
		//实现对数组的复制
		int [] arr2;		//源数组  复制的长度(新数组的长度)
		arr2 = Arrays.copyOf(arr, arr.length);
		arr[0] = 8;//验证不是假复制!
		System.out.println(Arrays.toString(arr2));
	}
}

运行结果:

[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]

4.修改数组的长度

数组的扩容
import java.util.Arrays;

public class ArrayDemo02 {
	public static void main(String[] args) {
		int [] arr = {1,2,3,4,5};
		arr = Arrays.copyOf(arr, arr.length + 1);//数组扩容
		System.out.println(arr.length);
		System.out.println(Arrays.toString(arr));	
	}
}

运行结果:

6
[1, 2, 3, 4, 5, 0]

数组的减容

可以间接实现删除

import java.util.Arrays;

public class ArrayDemo02 {
	public static void main(String[] args) {
		int [] arr = {1,2,3,4,5};
		arr = Arrays.copyOf(arr, arr.length - 1);//数组减容,间接实现删除
		System.out.println(Arrays.toString(arr));	
	}
}

运行结果:

[1, 2, 3, 4]

数组元素的排序

Arrays.sort(数组名)

这个是数组中自带的排序方法,是从小到大的顺序。

import java.util.Arrays;

public class T {
	public static void main(String[] args) {
			  int [] arr={8,12,565,6,45,9};
			  Arrays.sort(arr);
			  System.out.println(Arrays.toString(arr));
	}
}

运行结果:

[6, 8, 9, 12, 45, 565]

二维数组

本质:数组中嵌套着一个数组

a[3][2]实际上就是数组a中有三个元素,这三个元素各自都是由两个元素组成。
老套娃选手了!
此处引用淘哥的图:
在这里插入图片描述

public class ArrayDemo02 {
	public static void main(String[] args) {
		int [] [] a = new int [3][2];
		System.out.println(a[2].length);
		System.out.println(a.length);
		a[1][0] = 2;
		System.out.println(Arrays.toString(a[1]));//输出图中间的那个数组,证实了套娃的本质!
	}
}

输出结果:

2
3
[2, 0]

个人学习笔记,若有误还望不吝赐教。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值