JavaSE -- 数组详细讲解(数组介绍,Arrays常用方法,二维数组创建)
数组
简介
数组是引用数据类型,是一种容器。是一组相同类型数据的组合,将这一组数据做统一管理。
栈内存中只存有数组的引用(地址)
数组中的变量类型如果是基本数据类型(int,double),则基本类型元素值直接存在堆内存的数组对象内部
如果是引用数据类型(String),则这些引用类型的地址(引用)存储在堆内存的数组对象内部。而这些引用数据单独存储在堆内存的其他位置,数组中的地址指向他们。
数组声明
数组创建出来后会在堆内存中开辟一块连续的空间地址。
- 数组静态创建:
int[] x = new int[]{1, 2, 3}; // 方式一
double y = {1.2, 1.3, 1.4}; //方式二
- 数组动态创建
int[] x = new int[10];
Arrays方法
-
Arrays.sort(x[])
: 基于快速排序实现排序,默认升序排序 -
Arrays.sort(x[],st,ed)
: 部分排序,只将数组 x[] 下标在 [st, ed) 中的元素进行排序 -
Arrays.toString(x[])
:将数组 x[] 转为字符串 “[1,2,3]” -
Arrays.fill(x[], num)
:将数组 x[] 中所有元素用数字 num 进行填充替换 -
Arrays.fill(x[], st, ed, num)
: 将数组 x[] 中下标范围 [st, ed) 内的元素用 num 进行填充替换 -
Arrays.binarySearch(x[], num)
: 用二分在数组中找到值为 num 的下标,如果没有找到就返回一个负数 -
int[] y = Arrays.copyOf(x, size)
: 先创建大小为 size 的数组,然后将数组 x[] 中前min(x.length(),size)
:的数复制过去,并返回,可用于实现数组自动扩容。 -
int[] y = Arrays.copyOfRange(x, 1, 3)
: 将数组 x[] 中的下标为 [1, 3) 的元素复制给 y[] 数组 -
Arrays.equals(x[], y[])
: 比较数组 x[] 和 y[] 是否相同,比较的数组内元素是完全相同 -
Arrays.compare(x[], y[])
:比较数组 x[] 和 y[] 的大小(按字典序,下标从小到大依次比较),(x == y)返回 0,(x < y) 返回负数,(x > y) 正数
二维数组
不同于C语言的二维数组,Java中的二维数组, 模拟形态不一定是一个矩形,也就是第二维数组大小可以不相同
静态创建
int[][] a = {{1, 2},{1, 2, 3}};
int[][] b = new int[][]{{1, 2}, {1, 2, 3}};
动态创建
此时第二维还没有被初始化,然而在 Java 当中第一维其实是一个数据类型是数组的数组,当没有赋值时,默认是null, 当访问
a[1][0]
会产生空指针异常。
int[][] a = new int[3][];
初始化
- 方式一
int[][] a = {{1, 2},{1, 2, 3}};
int[][] b = new int[][]{{1, 2}, {1, 2, 3}};
- 方式二
int[][] a = new int[3][];
int arr1 = {1, 2, 3};
int arr2 = {1, 2};
int arr3 = {1};
a[0] = arr1;
a[1] = arr2;
a[2] = arr3;