概念
相同的数据类型,按照一定顺序排列的有限元素集合。
按照一个名字命名,并通过编号的方式对这些数据统一进行管理。
数组在内存中是连续存放的。
数组是引用类型,数组的元素既可以是引用数据类型,也可以是基本数据类型。
数组的长度一旦确定,不可修改。
⚠️:这里有几个核心概念,一定要记住
-
数组就是把多个数据放到一起,形成一个组。就像你家,你们班级,你们团队都是有多个【人】组成的一样。
-
数组内元素的数据类型是一样的。人不能和北极熊 放到一个数组中
-
数组元素在内存中时连续存放的。连续指的是内存地址是“挨着的”。元素存放在一块 【连续的内存中】。
-
数组本身是引用类型。指的是数组是一块存储着相同数据类型数据的 连续的 内存地址,数组名指向这段连续内存地址的首地址。
-
数组长度一旦确定,就不能修改了,为啥?因为要保证数组的连续性。张三说他家三口人,我把房间 101,102,103分给张三家住了。他家是连续的。后来,我把104房间给了另外一个单身狗李四住了,再后来,张三家多个了弟弟张四,我就只能让张四住106了。这就打破了 连续性的 规则了。所以,数组长度确定,就不能修改了。因此 张三家不允许再生弟弟了。
接下来,快速过一下数组的语法知识
声明
形式1:数据类型[] 数组名;
形式2:数据类型 数组名[];
int[] arr;
int arr[];
创建
形式1:数组名 = new 数据类型[数组长度];
int[] arr;
//长度为3个元素的整数数组
arr = new int[3]
arr[1] = 100; //int类型 未赋值的默认初始化为0
//或者,长度为3个元素的数组,并且已经设置了元素
arr = new int[]{18,28,39}
arr1[1] = 200;
形式2(初始化):数据类型[] 数组名 = {元素1,元素2,...};长度就是元素个数
int[] arr = {1,2,3,4,5,6,7,8};
存储
数组和字符串一样,是引用类型(类)。数组元素在内存中是连续存放的。默认被初始化(整形是0......)。数组名指向第一个元素的起始地址。
案例
public class ArrDemo {
public static void main(String[] args) {
// 声明一个数组
int[] intArray;
String strArray[];
intArray = new int[5];
strArray = new String[10];
// 声明数组的同时进行创建
float[] floatArray = new float[4];
// 初始化数组
char[] ch = { 'a', 'b', 'c', 'd' }; //4
System.out.println(ch.length);
System.out.println("intArray数组的第二个元素的默认值:" + intArray[1]); //0
System.out.println("strArray数组的第二个元素的默认值:" + strArray[1]); //null
System.out.println("floatArray数组的第二个元素的默认值:" + floatArray[1]); //0.0
}
}
增强for循环-foreach
int[] arr;
for(int n:arr){
//循环去取值付给n,对n操作
}
//其内部原理其实是迭代器(见集合)
//迭代器不关心数组有多大,类似于流式处理,取一个处理一个,直到取不到为止
二维数组
所谓的多维数组,指的是数组的元素是数组
数据类型[][] 数组名;
数据类型 数组名[][];
数据类型[] 数组名[];
数据类型 arr[][] = {{1,2,3},{4,5,6,7},{8,9,10,11,12}};
前行后列
底层认为,每一行是一个一维数组,所以,创建二维数组时,可以暂时不指定列,但一定要指定行数。而且每行的元素个数可以不一样。
int arr[][] = new int[3][];
//3行不知道多少列,但我们知道这是三个一维数组,数组名分别为arr[0],arr[1],arr[2]。
arr[0] = new int[3]; //第一个一维数组 初始化 3个元素
arr[1] = new int[4]; //第二个一维数组 初始化 4个元素
arr[2] = new int[5]; //第三个一维数组 初始化 5个元素
System.out.println(arr[1][3]); // 取第2个一维数组中的 第4个元素
数组工具类Arrays
Arrays是java.util包中给我们提供的工具类,里面有一些对数组操作的常用方法。如下:
Boolean equals(数组1,数组2)//判断两个数组是否相等(先判断地址,再判断内部的值)
String toString(数组)//输出数组信息(内部元素值)
void sort(数组) //对数组进行排序(升序,快排)
案例-冒泡排序
public class SortDemo {
public static void main(String args[]) {
int[] arr = {12,23,43,4,54,56,76};
int temp = 0;
for (int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-i-1;j++) {
if (arr[j]<arr[j+1]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int n:arr) {
System.out.print(n +" ");
}
}
}