1、数组是什么?
数组就是一个容器,可以用来装【很多数据元素】,是一种特殊数据类型,引用数据类型。
容器简单理解:容器就像一个装【冰块】的【冰格】,可以装很多的【冰块】。
数组就是【冰格】,数组的元素就是【冰块】。
之前学的数据类型,基本类型,String,自定义类型都是只能装一个值!!!
有时候我们定义的变量需要装多个数据的时候。
变量,参数,返回值--》装入多个数据
例如:
喜欢的食物,喜欢的明星,喜欢的数字,喜欢的运动,拥有的手机,拥有的朋友。这些数据 可以通过数组来存储。
3、数组的定义
a)数组描述的是统一类型的【长度固定】若干个数据;
b)数据按照一定的先后次序排列(位置:0到length-1)组合而成。 其中,每一个数据称作一个数组元素。
4.数组的遍历-》取出数组里所用到元素
* 语法:
*
* for(int idx=0;idx<=数组引用.length-1;idx++){//idx 数组下标
* //取出元素
* 数组元素类型 接收变量= 数组引用[idx];
5.访问数组-使用数组存储取出数据
*
* 1)访问数组的位置(下标,索引)->范围:0到length-1
* 语法:数组引用[位置]
* a)把值放入数组的位置
* 数组引用[位置]=值;
* b)取出数组位置的值
* 数组元素类型 接收的变量=数组引用[位置]
* 2)访问数组的长度
* 语法:数组引用.length
6.创建数组对象
*
* 1)动态初始化:a)知道数组长度
*
* 语法(定义数组引用 指向 动态态初始化的数组对象):
*
* 元素类型[] 引用变量名=new 元素类型[长度];
*
* 注意点:
* 动态初始化创建的数组,数组的各位置上都有默认值-》规则和成员变量一致...
7.创建数组对象
*
* 1)静态初始化:a)知道数组长度 b)知道元素的内容
*
* 语法(定义数组引用 指向 静态初始化的数组对象):
*
* 元素类型[] 引用变量名=new 元素类型[]{元素值1,元素值2...};
8.定义变量
* 语法: 数据类型 变量名;
*
* 定义数组的引用变量
* 语法1:
* 元素类型[] 引用变量名;(java-》推荐)
*
* 语法2:
* 元素类型 引用变量名[];(c保留)
9.数组的注意点
1)统一类型:存储的数组元素是统一的类型,可以类型兼容,自动类型转换
a)基本类型: 小数据范围类型 转 大数据范围类型
b)引用类型: 子类型 转 超类型
2)长度固定:创建数组对象的时候,长度就设置好了以后不能改变
3)数组下标-范围(0到len-1)-》访问的时候不能越界
--》否则报错ArrayIndexOutOfBoundsException
4)内存连续:数组底层内存区域是连续的,访问(读取和设置效率 高)
5)存储在堆中:引用类型,每一个数组都是对象存储在堆中
6)数组的元素类型是引用类型,那么数组所有元素位置存储的是对象地址
7)数组的超类型指向子类型
满足:数组引用的数组元素的类型 是数组对象 的数组元素的类型的超类型
8)Object也是数组的超类型
10.Arrays类:封装了数组常见操作的工具方法
对数组里的内容做一定处理满足业务要求
a)数组里所有元素转字符串
Arrays.toString
b)数组填充-初始化
Arrays.fill
c)数组copy
System.arraycopy
Arrays.copyOf
d)数组排序
Arrays.sort(a);
怎么实现对引用类型排序(???)
1)comparable接口
2)comparator接口(自学)
f)二分法查找(自学)
Arrays.binarySearch
g)asList(学了容器说)
11.多维数组(数组的元素也是数组)
注意:通常使用二维数组就够了,最多不超过三维,否则逻辑会很复杂,请检查算法问题。
数组的元素类型 [] 数组引用变量;
int [] [] []arr2 ; 其元素是int [] []类型
int [] [] arr3; 其元素是int [] 类型
int [] arr4; 其元素是int 类型
例如:
1)存储公司2个员工最近3个月的工资。
2)存储班上3个同学4门科目的成绩。
简单理解:
1)二维数组理解可以理解为表格,分为行跟列
2)二维数组有多少个元素(一维数组)就是多少行
3)二维数组的元素(一维数组)有多少个元素就是多少列
4)每一行的列数可以不相同
12.二维数组的访问-和一维数组规则一致
a)访问 长度 .length
b)访问数组位置 []
*
* 二维数组的访问-》
*a)访问二维数组的长度
* 语法: 二维数组.length
*b)访问二维数组的元素(一维数组)
* 语法: 二维数组[行下标]
*c)访问二维数组的元素(一维数组)的长度
* 语法: 二维数组[行下标].length
*d)访问二维数组的元素(一维数组)的元素
* 语法: 二维数组[行下标][列下标]
*
* 遍历二维数组里所有的一维数组的元素
*
* 语法:
* 遍历二维数组里所有的行
* for(int rowIdx=0;rowIdx<=二维数组.length-1;rowIdx++){
* 遍历当前行的所有的列
* for(int colIdx=0;colIdx<=二维数组[rowIdx].length-1;colIdx++){
* //当前行的当前列
* 二维数组[rowIdx][colIdx]
13.二维数组动态初始化
*
* 定义二维数组引用 指向 动态初始化的二维数组对象
*
* 语法1:如果每一行列的长度一致-》采用该语法
* 一维数组元素类型 [][] 二维数组引用名 = new 一维数组元素类型 [行长度][列长度];
*
* 注意点:该语法,会创建行长度的二维数组,并为每一个位置创建一个列长度的一维数组。
*
*
* 语法1:如果每一行列的长度不一致-》采用该语法
* 一维数组元素类型 [][] 二维数组引用名 = new 一维数组元素类型 [行长度][];
*
* 注意点:该语法,会创建行长度的二维数组,并为每一个位置设置null。
14.二维数组静态初始化
*
* 定义二维数组引用 指向 静态初始化的二维数组对象
* 语法:
* 一维数组元素类型 [][] 二维数组引用名 = new 一维数组元素类型 [][]{
* {1行1列,1行2列,...},//二维数组第1行内容
* {2行1列,2行2列,...}//二维数组第2行内容