数组的一个不可变的容器,长度不可修改,一旦声明了数组的长度,该数组无法修改长度
扩展知识
1: 数据结构 数据结构是存储数据的方式,在计算机中,为了应对不同的需求场景,需要设计不同数据存储结构来满足要求。不同的开发语言中,对于数据结构的支持程度是不一样的。理论上,Java中对于大对数数据结构都有设计。但是基本上所有的结构都是基于数组或者是对象(引用类型)来完成 2: 算法 应对与不同的数据结构,我们对于数据存储之后的操作需求不同,导致我们要设计不同的编码实现方案,来完成对应的诉求,比如某些情况下我希望: 我的算法能针对于A数据结构,快速的定位到数据; 我的算法能针对于B数据结构,快速的删除掉数据; 。。。。。。。。。。。。。。。。。。。。。。
数组的定义
通过连续的存储空间,存储相同类型数据的有序集合,称之为数组。
数组的静态初始化
内存
// 固定写法 // data_type[] names ; 声明 // names = new data_type[]{value1,value2,value3......};
public class Test01 { public static void main(String[] args) { //1: 声明一个int类型的数组 int[] ars ; //2: 给数组初始化一下 ars = new int[]{1,11,111,1111,2}; // 将数组的声明和初始化发在一起 boolean[] genders = new boolean[]{true,false,true,true}; } }
-
通过静态初始化可以确定当前数组的长度以及当前数组中每个位置上的元素值是多少。
数组的动态初始化
数组的属性
-
长度
-
也称之为数组的容量或者是数组中的元素个数(这三个值是相等的)
-
int[] ars = new int[]{1,2,3,4,5} int length = ars.length; System.out.println("当前数组ars的长度是:"+ars.length);
-
索引
-
每个数组元素都存在一个索引(下标),索引位置从0开始。
-
索引一定是 0<=index<length
-
int[] ars = new int[]{1,2,3,4,5} System.out.println("当前数组ars中第一个元素是:"+ars[0]); System.out.println("当前数组ars中最后一个元素是:"+ars[ars.length-1]);
数组的长度一旦确定,无法修改。
public class Test03 { public static void main(String[] args) { int[] ars = new int[]{1,3,4,65}; System.out.println("该数组的长度是:"+ars.length); // 给当前ars这个变量重新赋值 ars = new int[]{1,3,4,5,6,7,8}; System.out.println("该数组的长度是:"+ars.length); } }
ArrayList : 集合类型 能够存储多个数据,有序可以根据索引进行操作 可以存储多个相同的数据 肯定根据需求对数据进行增删,长度会动态改变 使用 步骤 : 1)定义一个ArrayList集合结构 2)数据存储集合结构中 add(数据)
HashSet : 集合类型 存储多个数据,要求数据不能重复,会自动去重 肯定根据需求对数据进行增删,长度会动态改变
二维数组
数组中存放数组 声明 : 数据类型[][] 数组名; -->推荐 初始化 : 动态初始化 : 创建数组同时不确定不确定数据 数据类型[][] 数组名 = new 数据类型[外层二维数组长度][内层一维数组长度]; 数据类型[][] 数组名 = new 数据类型[外层二维数组长度][]; 数组名[二维数组的索引] = new 一维数组[长度]; 数组名[二维数组的索引] = new 一维数组[]{数据值....}; 静态初始化 : 闯将数组的同时赋值,根据数据的个数决定数组的长度 数据类型[][] 数组名 = new 数据类型[][]{{值列表},{值列表},....}; 数据类型[][] 数组名 = {{值列表},{值列表},....}; 操作数组中的数据 : 数组名[外层二维数组索引][内层一维数组索引] 遍历 : 双重循环嵌套 for-->foreach for-->for foreach-->foreach foreach-->for
//for-->foreach for(int i=0;i<=arr3.length-1;i++){ for(char ch:arr3[i]){ System.out.println(ch); } } //foreach-->foreach for(String[] a:arr2){ for(String s:a){ System.out.println(s); } }
稀疏矩阵转为稠密矩阵:
稠密矩阵一共有N行,3列。 N=当前稀疏矩阵中存在数据的个数+1 1代表白点 2代表黑点 第一行: 当前稀疏矩阵的行数 当前稀疏矩阵的列数 当前稀疏矩阵的数据个数 7 7 8 第二行:存在数据的x坐标 存在数据的y坐标 存在的数据 0 3 1 第二行:存在数据的x坐标 存在数据的y坐标 存在的数据 1 3 2 。。。。。。 整个稠密矩阵: 7 7 8 0 3 1 1 3 2 2 2 1 2 3 2 2 4 1 3 3 2 4 3 2 5 3 1