一、数组的基本概念1.为什么要使用数组? 为了方便储存相同类型的数据,不用对多个数据的类型在进行多次定义
2.什么是数组? 数组是相同数据类型的一个集合
数组中的数据类型都是相同的;数组的空间是连在一起的;数组的每个空间都有编号,下标是由0开始的。 二、数组的创建及初始化1.数组的创建 T [] 数组名=new T[N];
T:表示数组元素类型;T[]:表示数组的类型;new:创建新的对象;N:表示数组的长度。代码语言:javascript复制int[] array1=new int[3];//表示可以容纳三个整形类型的元素的数组,默认值都为02.数组的初始化数组的初始化分为静态初始化和动态初始化
动态初始化 动态初始化:在创建数组时,直接指定数组元素的个数
代码语言:javascript复制 int[] array1=new int[3]//元素值都默认为0静态初始化 静态初始化:在创建数组时,不直接指定数组元素的个数,而直接将具体的数据内容进行指定
代码语言:javascript复制 int[] array={1,2,3};
int[] array2=new int[]{1,2,3};动态初始化和静态初始化可以分为两步,但不可以省略new T []; 静态初始化时,T数组元素类型要对应相同;静态初始化时,T数组元素类型要与{}中的元素类型对应相同;静态初始化时,new T[]可以省略;初始化时,不能既静态初始化又动态初始化,即不能又指定数据个数又指定数据具体内容;如果没有对数组初始化指定具体内容,数组中的数据有其默认值。三、数组的使用1.数组中元素的访问 我们知道数组的空间是连续的,每一块空间都有自己的编号,编号由0开始,依次递增,编号也就是下标,数组的下标是由0开始,所以我们访问通过数组的下标来访问数组元素。
代码语言:javascript复制 int[] array=new int[]{1,2,3};
System.out.println(array[0]);//1
System.out.println(array[1]);//2
System.out.println(array[2]);//3由于下标由0开始,所以下标的范围在[0,N),而N表示元素个数,不要越界,否则报错; 2.如何快速遍历数组?遍历数组:访问数组中的所有的元素个数
为了方便,我们可以通过 数组名.length 来获取数组长度;代码语言:javascript复制 int[] array=new int[]{1,2,3}
//while循环遍历
int j=0;
while(j System.out.print(array[j]+" "); j++; } System.out.println(); System.out.println("======="); //do...while循环遍历 j=0; do{ System.out.print(array[j]+" "); j++; }while(j System.out.println(); System.out.println("======="); //for循环遍历 for (int i = 0; i < array.length; i++) { System.out.print(array[i]+" "); }此外还可以利用for-each循环遍历数组 代码语言:javascript复制 int[] array=new int[]{1,2,3}; for(int x:array){ System.out.print(x+" "); //将array数组中的每个放到x元素中 }3.以字符串的形式输出使用Arrays的toString方法将数组以字符串的形式输出 代码语言:javascript复制 int[] array=new int[]{1,2,3}; String ret= Arrays.toString(array); System.out.println(ret);//[1,2,3]三、数组是引用类型 1.初始JVM内存分布 内存是一段连续的空间,主要用来储存程序运行时的数据 内村划分: 现在我们只需简单的关心虚拟机栈和堆就好: 虚拟机栈: 与方法调用相关的一些信息,每个方法在执行时,都会先创建一个栈帧,栈帧中包含:局部变量表、操作数栈、动态链接、返回地址以及一些其他信息。当运行结束时,栈帧就被销毁了,即栈帧中保存的数据也会被销毁。 堆:JVM所管理的最大的内存区,使用new创建的对象都是在堆上保存的,堆是随着程序开始运行时而创建的,随程序的退出而销毁,堆中的数据只要还在使用就不会被销毁。 2.基本变量与引用变量的区别 基本变量:该变量空间存放的是其对应的值 引用变量:该变量空间储存的是其所在的地址 代码语言:javascript复制 int a=1; int b=2; int[] array=new int[]{4,5,6};a,b是内置类型的变量,其空间保存的值是其初始化的值;array是数组类型的引用变量,其空间保存的是其在堆空间的首地址;3.引用变量 代码语言:javascript复制 int[] array=new int[]{1,2,3}; int[] array1=new int[]{4,5,6};代码语言:javascript复制public static void main(String[] args) { int[] array=new int[]{1,2,3}; int[] array1=new int[]{4,5,6}; array=array1; for(int x:array1){ System.out.print(x+" ");//4,5,6 } array1[0]=11; System.out.println(array1[0]);//11 System.out.println(array[0]);//11 } 将array1中的地址给了array,也就是array的地址之后都指向array1的地址,与array共用一个地址,里面的值也相同所以array1里面内容的改变array也会随之改变