何为数组?
数组是一种数据结构,用来存放同一类型元素的集合。
如何使用数组?
首先需要进行声明,告知编译器你想使用什么数据类型的数组?数组的名称又是什么?
声明数组:语法结构: 数据类型 [] 数组名;
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]
个人学习笔记,若有误还望不吝赐教。