目录
数组对于每一门编程语言来说都是重要的数据结构之一,Java中数组可以看成是相同类型元素的一个集合。
数组的创建及初始化
Java中用 类型[] 数组名 = new 类型[数组长度] 来创建一个数组
int[] a1 = new int[10];//创建一个可以容纳10个int类型元素的数组 double[] a2 = new double[10];//创建一个可以容纳10个double类型元素的数组
也可以用 类型 数组名[] = new 类型[数组长度] 来创建一个数组(不推荐)
int a1[] = new int[10];//创建一个可以容纳10个int类型元素的数组
在创建数组的同时可以对数组进行动态初始化或静态初始化
动态初始化:在创建对象时,直接指定数组中元素个数
int[] arr1 = new int[10];//一步到位 int[] arr2; arr2 = new int[10];//分步进行
静态初始:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定
int[] arr1 = new int[]{1, 2, 3};//根据{}里元素个数确定数组长度 int[] arr2 = {1, 2, 3};//静态初始化可以简写,省去new int[] int[] arr3; arr3 = new int[]{1, 2, 3}//分步进行(分步进行不能省去new int[])
注:若数组中元素没有进行初始化,则数组中的元素会为其类型对应的默认值shiy
数组的遍历
数组在内存中是移动连续的空间,下标从零开始到N-1,可以通过下标进行访问
Java中遍历数组主要有四种方式
1.逐个遍历
int[]array = new int[]{10, 20, 30}; System.out.println(array[0]); System.out.println(array[1]); System.out.println(array[2]);
2.循环遍历
int[]array = new int[]{1, 2, 3}; for(int i = 0; i < array.length; i++){ System.out.println(array[i]); }
注:Java中可以通过 数组名.length 来获取数组的长度
3.for-earch遍历
int[] array = new int[]{10, 20, 30}; for (int x:array){ System.out.println(x); }
注:for-each 是 for 循环的另外一种使用方式. 能够更方便的完成对数组的遍历. 可以避免循环条件和更新语句写错.4.先通过Arrays.toString()方法将数组转换成字符串,再将字符串直接打印出来int[] array = new array[]{1, 2, 3} System.out.println(Arrays.toString(array));
数组的内存分配
内存是一块连续的存储空间,主要用来存储程序运行时产生的数据,根据不同的数据,JVM对所使用的内存按照功能的不同划分成了程序计数器,虚拟机栈,本地方法栈,堆,方法区
五种。数组内存的分配就要用到堆和虚拟机栈。
Java里的数组是一种引用类型,与基本数据类型是直接在变量空间存放对应的值不同,引用数据类型在变量空间中存放的是其对象所在空间的地址。
下面这段代码
public static void func() { int a = 10; int b = 20; int[] arr = new int[]{1,2,3}; }
变量a,b,arr在的内存分配如下:
可见,数组变量里并不直接存放数组中的元素,而是存储在堆上的相应对象的地址,通过地址来操作堆上的对象。
数组的常用方法
Java中提供了一个 Arrays 类,Arrays 类提供了许多静态方法可以用于操作数组
1.Arrays.toString()
Arrays.toString()用于将数组转变成字符串
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3}; String str = Arrays.toString(arr); System.out.println(str); } }
运行结果如下:
2.Arrays.copyOf()
Arrays.copyOf()用于拷贝一个指定长度的新数组
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3}; int[] copyOfArr = Arrays.copyOf(arr, 5); String str = Arrays.toString(copyOfArr); System.out.println(str); } }
运行结果如下:
3.Array.copyOfRange()
Array.copyOfRange(int[] original, int from, int to))用于从一个数组的from下标开始拷贝to个长度的数组
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = new int[]{1, 2, 3}; int[] copyOfRangeArr = Arrays.copyOfRange(arr, 0, 4); String str = Arrays.toString(copyOfRangeArr); System.out.println(str); } }
运行结果如下:
4.Arrays.sort()
Arrays.sort()用于将数组按升序排序,有两种重载方法:
①.Arrays.sort(数组名)
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = new int[]{3, 2, 1, 5, 2, 2}; Arrays.sort(arr); String str = Arrays.toString(arr); System.out.println(str); } }
运行结果如下:
②.Arrays.sort(数组名,起始下标,排序个数)
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] arr = new int[]{3, 2, 1, 5, 2, 2}; Arrays.sort(arr, 0, 4); String str = Arrays.toString(arr); System.out.println(str); } }
运行结果如下:
5.Arrays.equal()
Arrays.equal用于比较两个数组内容是否相等
import java.util.Arrays; public class Test { public static void main(String[] args) { int[] a = {1, 2, 3}; int[] b = {1, 2, 4}; System.out.println(Arrays.equals(a,b)); } }
运行结果如下: