Java数组详解
数组概述
- 数组是相同类型数据的有序集合
- 数组描述的是相同类型(比如int类型)的若干个数据,按照一定的先后次序排列组合而成
- 数组中的每一个元素称作一个数组元素,每个数组元素可以通过一个下标来访问
数组的声明和创建
-
首先需要声明数组变量,才可以在程序中使用
-
声明数组变量语法:
dataType[] arrayName;//类型[] 数组名 dataType arrayName[];//类型 数组名[] //首选第一种声明方式
-
Java语言使用new操作符创建数组,语法为:
dataType[] arrayName=new dataType[arraySize] //数组类型[] 数组名=new 数组类型[数组大小]
-
数组元素通过索引访问,数组索引从0开始
-
获取数组长度:
arrays.length
-
举例:
package arrays; public class arraysDemo01 { public static void main(String[] args) { //声明一个数组 int[] a; //创建一个数组 a=new int[5]; // 给数组中元素赋值 a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5; System.out.println(a[2]);//输出数组中下标为2的元素 //计算数组中元素的和 int sum=0; for (int i=0;i<a.length;i++){ //获取数组长度:a.length sum+=a[i]; } System.out.println("元素总和为:"+sum); } }
-
内存分析
- 堆:存放new的对象和数组,可以被所有的线程共享,不会存放别的对象引用
- 栈:存放基本变量类型(包含这个基本类型的具体数值),引用对象的变量(存放这个引用在堆里的具体地址,不是具体的对象和数组)
- 方法区:可以被所有的线程共享,包含了所有的class和static变量
-
三种初始化方式
-
静态初始化
int[] a={1,2,3,4}; int[] mans={new Man(1,1),new Man(2,2)};
-
动态初始化
int[] b=new int[3]; b[0]=1; b[1]=2; b[2]=3;
-
数组的默认初始化
- 数组是引用类型,元素相当于实例变量,所以数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化
int[] b=new int[3]; //b[0]、b[1]、b[2]默认为0
-
-
数组的四个基本特点
- 长度是确定的,数组一旦被创建,它的大小就是不可以改变的
- 数组中的元素可以是相同数组类型,包括基本类型和引用类型,但是必须是相同类型
- 数组变量属引用类型,数组也可以看做是对象,数组中的每个元素相当于该对象的成员变量
- 数组本身就是对象,数组对象本身也是在堆中的
-
数组边界
-
数组下标的合法区间:[0,length-1],如果越界就会报错、
public class arraysDemo02 { public static void main(String[] args) { int[] a=new int[2]; System.out.println(a[2]); //ArrayIndexOutOfBoundsException:数组下标越界异常 } }
-
-
小结:
- 数组元素必须是相同元素的有序集合
- 数组也是对象,数组元素相当于对象的成员变量
- 数组长度的确定的,不可变的,如果越界,会报:ArrayIndexOutOfBoundsException
数组的使用
package arrays;
public class arraysDemo03 {
public static void main(String[] args) {
int[] array={2,12,3,65,455,662,23};
//遍历数组
for(int i=0;i<array.length;i++){
System.out.println(array[i]);
}
System.out.println("==============");
//求数组元素的和
int sum=0;
for (int i=0;i<array.length;i++){
sum+=array[i];
}
System.out.println(sum);
System.out.println("=================");
//查找最大元素
int result=array[0];
for (int i=1;i<array.length;i++){
if (array[i]>result){
result=array[i];
}
}
System.out.println("max="+result);
System.out.println("==============");
//反转数组
int[] result1=new int[array.length];
for (int i=0,j=array.length-1;i<array.length;i++,j--){
result1[j]=array[i];
}
for(int i=0;i<result1.length;i++)
System.out.println(result1[i]);
}
}
//以上对数组的基本使用,可以写成方法,然后再main方法中调用会更符合编程的使用习惯
多维数组介绍
-
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组
-
二维数组
int[][] a=new int[2][5];//创建一个2行5列的二维数组
-
举例:
package arrays; public class arraysDemo04 { public static void main(String[] args) { //创建一个[4][2]的二维数组 int[][] arrays={{1,2},{2,3},{3,4},{4,5}}; //1,2 arrays[0] //2,3 arrays[1] //3,4 arrays[2] //4,5 arrays[3] System.out.println(arrays[0][0]);//输出arrays[0]中的下标为0的元素,即1 System.out.println(arrays[1][1]);//输出arrays[1]中的下标为1的元素,即3 System.out.println("=============="); //遍历二维数组 for (int i=0;i<arrays.length;i++){ for (int j=0;j<arrays[i].length;j++){ System.out.println(arrays[i][j]); } } } }
Arrays类
-
数组的工具类为java.util.Arrays
-
Arrays类中的方法都可以直接调用
-
Arrays类使用举例:
import java.util.Arrays; public class arraysDemo05 { public static void main(String[] args) { int[] arrays={12,33,2,35,55,222,10}; System.out.println(arrays);//输出为[I@2d98a335 //打印数组Arrays.toString(arrays) System.out.println(Arrays.toString(arrays));//输出为[12, 33, 2, 35, 55, 222, 10] //数组排序 Arrays.sort(arrays);//升序 System.out.println(Arrays.toString(arrays)); } }