数组是一种数据结构,用来存储同一类型值的集合。通过一个整型索引(index,或称为下标)可以访问数组中的每一个值。
import java.util.Arrays; public class TestClass { public static void main(String[] args) { /*------------------------------------------------------------------- 【声明并初始化数组,设置数组长度】数据类型[] 数组名称 = new 数据类型[数组长度]; 1、数组长度不一定是常量,也可以是变量 2、数组创建以后就不能改变长度了,想要改变长度,可以用另一种数据结构数组列表 3、new关键字用于初始化 */ int[] num = new int[5]; String[] str = new String[5]; /*------------------------------------------------------------------- 【声明并初始化数组,设置初始值】数据类型[] 数组名称 = {数组值1,数组值2,...} 1、可以看到这句没有用到new,这是因为java编译器提供了一个语法糖,实际上编译时还会翻译成new xxx */ int[] b = {1,2,3,4,5,6,7}; System.out.println("b数组首次初始化,设置数组内容:"+Arrays.toString(b)); /*<输出> b数组首次初始化,设置数组内容:[1, 2, 3, 4, 5, 6, 7] -------------------------------------------------------------------*/ /*------------------------------------------------------------------- 【声明并初始化数组,设置初始值,最后一个值后面有逗号】 1、最后一个值后面有逗号,方便后续为数组增加值 */ String[] authors = { "Zhang San", "Li Si", }; /*------------------------------------------------------------------- 【匿名数组】new 数据类型[] {数组内容} 1、这里用到的Array.toString是用于打印数组内容的,如果不用这个包裹,打印的是数组的数据结构、数据类型、内存中的哈希地址 2、匿名数组常用于减少代码量,比如方法入参,我就想使用指定的一些值来进行操作,那么就不需要特意声明一个数组再去处理 */ System.out.println("匿名数组:"+Arrays.toString(new int[] {17,19,23})); /*<输出> 匿名数组:[17, 19, 23] -------------------------------------------------------------------*/ /*------------------------------------------------------------------- 【重新初始化数组】数组名称 = new 数据类型[] {数组内容} 1、重新初始化数组时,数据类型要和数组一致,数组内容可以变更 */ b = new int[] {4,5,6,7,8}; System.out.println("b数组重新初始化,设置数组内容:"+Arrays.toString(b)); /* <输出>b数组重新初始化,设置数组内容:[4, 5, 6, 7, 8] -------------------------------------------------------------------*/ /*------------------------------------------------------------------- 【访问数组】数组名称[索引] 1、数组元素从0开始编号,即第一位的索引为0 2、数字数组初始化时,所有元素都初始化为0 3、对象数组初始化时,所有元素都初始化为null 4、数组.length可以获取数组的初始化长度,可以通过这个方法和for循环来实现数组元素的遍历 */ System.out.println("num数组为int类型数组,没有初始值,所有元素初始化为0:"+Arrays.toString(num)); System.out.println("str数组为String类型数组,没有初始值,所有元素初始化为null:"+Arrays.toString(str)); System.out.println("我要打印authors数组的第二个数组元素,authors[1]:"+authors[1]); for (int i=0;i<b.length;i++) { if (i==0) System.out.println("<开始逐个打印b数组的数组元素>"); System.out.println("b数组的第"+(i+1)+"个数组元素为:"+b[i]); if (i==b.length-1) System.out.println("<打印结束>"); } /*<输出> num数组为int类型数组,没有初始值,所有元素初始化为0:[0, 0, 0, 0, 0] str数组为String类型数组,没有初始值,所有元素初始化为null:[null, null, null, null, null] 我要打印authors数组的第二个数组元素,authors[1]:Li Si <开始逐个打印b数组的数组元素> b数组的第1个数组元素为:4 b数组的第2个数组元素为:5 b数组的第3个数组元素为:6 b数组的第4个数组元素为:7 b数组的第5个数组元素为:8 <打印结束> -------------------------------------------------------------------*/ /*------------------------------------------------------------------- 【for each循环和数组】for (变量数据类型 变量名:数组名) statement */ int flag = 1; for (String author:authors) { System.out.println("打印authors数组第"+flag+"个数组元素:"+author); flag++; } /*<输出> 打印author数组第1个数组元素:Zhang San 打印author数组第2个数组元素:Li Si -------------------------------------------------------------------*/ /*------------------------------------------------------------------- 【数组拷贝,拷贝引用地址】数据类型[] 数组名称 = 已存在的数组名称 这种方式拷贝,如果其中一个数组发生变化,另一个数组会跟着变化 【数组拷贝,通过Arrays类的copy0f方法拷贝数组值】数据类型[] 数组名称 = Arrays.copyOf(已存在的数组名称,新数组长度) 这种方式拷贝,两个数组相互独立 */ int[] b_copy1 = b; int[] b_copy2 = Arrays.copyOf(b,b.length); int[] b_copy3 = Arrays.copyOf(b,b.length*2); System.out.println("b数组内容:"+Arrays.toString(b)); System.out.println("b_copy1数组内容:"+Arrays.toString(b_copy1)); System.out.println("b_copy2数组内容:"+Arrays.toString(b_copy2)); System.out.println("b_copy3数组内容:"+Arrays.toString(b_copy3)+"\n"); System.out.println("b数组元素修改,b指向的数组内容,影响b和b_copy1"); b[1] = 999; System.out.println("b数组内容:"+Arrays.toString(b)); System.out.println("b_copy1数组内容:"+Arrays.toString(b_copy1)); System.out.println("b_copy2数组内容:"+Arrays.toString(b_copy2)); System.out.println("b_copy3数组内容:"+Arrays.toString(b_copy3)+"\n"); System.out.println("b数组重新初始化,b指向的数组变了,只影响b本身"); b = new int[] {8,9,10,11}; System.out.println("b数组内容:"+Arrays.toString(b)); System.out.println("b_copy1数组内容:"+Arrays.toString(b_copy1)); System.out.println("b_copy2数组内容:"+Arrays.toString(b_copy2)); System.out.println("b_copy3数组内容:"+Arrays.toString(b_copy3)); /*<输出> b数组内容:[4, 5, 6, 7, 8] b_copy1数组内容:[4, 5, 6, 7, 8] b_copy2数组内容:[4, 5, 6, 7, 8] b_copy3数组内容:[4, 5, 6, 7, 8, 0, 0, 0, 0, 0] b数组元素修改,b指向的数组内容,影响b和b_copy1 b数组内容:[4, 999, 6, 7, 8] b_copy1数组内容:[4, 999, 6, 7, 8] b_copy2数组内容:[4, 5, 6, 7, 8] b_copy3数组内容:[4, 5, 6, 7, 8, 0, 0, 0, 0, 0] b数组重新初始化,b指向的数组变了,只影响b本身 b数组内容:[8, 9, 10, 11] b_copy1数组内容:[4, 999, 6, 7, 8] b_copy2数组内容:[4, 5, 6, 7, 8] b_copy3数组内容:[4, 5, 6, 7, 8, 0, 0, 0, 0, 0] -------------------------------------------------------------------*/ /*------------------------------------------------------------------- 【数组排序】Arrays.sort(数组名称) 用的是快速排序算法,QuickSort */ b[2] = 5632; System.out.println("b数组排序前:"+Arrays.toString(b)); Arrays.sort(b); System.out.println("b数组排序后:"+Arrays.toString(b)); /*<输出> b数组排序前:[8, 9, 5632, 11] b数组排序后:[8, 9, 11, 5632] */ /*------------------------------------------------------------------- 【常见Arrays类方法罗列】 【命令行接收数组参数】 【多维数组】 后面再学吧 */ } }
浙公网安备 33010602011771号