一、数据结构
数据结构是计算机中用于存储和组织的数据的一种方式
数据结构它是指相互之间存在一种或多种特定的数据集合(容器)
数据结构:数组、链表、树、图、队列等
二、数组
2.1为什么要存在数组
变量只能存储单个元素,对于多个元素的存储我们就需要依靠数据结构或者它们的其他形式
2.2数组定义
数组是一个用于存储数据的容器
数组是相同类型的数据通过一个标识符号组织在一起的数据序列
数组是一个线性存储结构
y = 2x + 1
2.3 数组特点
一致性:数组存储的元素数据类型必须是一致的
不变性:数组一旦定义好以后它的长度就不能发生变化
有序性:数组的元素是按照顺序存储的
2.4数组的结构理解
数组其实就是一块连续分配的内存空间
数组通过索引来保证线性
2.5数组的程序结构
2.5.1数组的程序结构(声明)
a、数据类型[ ] 数组名
b、数据类型 数组名 [ ] ------不推荐使用
2.5.2数组的初始化
a、先分配内存空间再动态初始化:---------动态初始化
该方式不仅会给数组分配内存空间,它还会给数组进行默认值赋值即根据不同的数据类型去分配不同的默认值
基本数据类型:
byte、short、int、long:0
float、double:0.0
boolean:false
char:0
引用数据类型:null
b、静态初始化方式一:------>静态初始化:在创建数组的同时直接往数组里面存放数据
数据类型[ ] 数组名 = new 数据类型[] {数据1,数据2,......}
c、静态初始化方式二:
数据类型[ ] 数组名 = {数据1,数据2,......}
2.6数组元素的方式访问
2.6.1单个元素的访问
数组是一个有序的线性结构,数组有索引
我们就可以考虑使用索引访问数组中的数组
数组名 [索引值]
[0,数组长度),0<=索引值<数组长度
我们在使用索引访问元素的时候需要注意的是索引值不能超出范围,否则程序就会抛出异常报错。如:
1、第一行是指程序异常类型及发生原因
2、第二行程序发生异常错误的位置
ArrayIndexOutBoundsException:7 ------>表示数组索引下标越界异常:索引值超出范围
2.6.2数组的遍历
a、for循环
b、for-each(增强for循环)
2.7数组元素的修改
所谓修改就是指先找到对应的元素,然后再去修改值
数组名 [下标索引] = 修改值;
注意:在数组中对于元素的修改可以发生在单个元素修改、for-i循环、for-each循环
2.8数组中没有所谓的增加、删除操作
三、数组的常用操作和工具类
3.1数组的常用操作
每个数组对象都有一个length属性用于获取数组的长度
3.2Arrays工具类
Arrays工具类给我们提供了对于数组元素的复制、比较、排序、查找等方法,我们在使用的时候直接调用对应的方法即可
3.2.1数组格式化输出
Arrays.toString()
3.2.2数组的比较
问题:数组比较的是什么
a、数组的长度
b、对应索引位置的元素是否相等
Arrays.equals()
3.2.3数组元素的替换
将数组中的元素给全部替换成某个值
Arrays.fill(arr,e)
fill方法影响的是对应操作数组本身
3.2.4数组的复制
新建一个数组,该数组和原数组类型一致,数组长度一致,将原数组中的元素依次复制到新数组
int[] a1 = {10,23,60,80};
int[] a2 = new int[a1.length];
for(int i=0;i<a1.length;i++){
a2[i] = a1[i];
}
对此Arrays工具类就提供了一些方法用于数组的复制
a、Arrays.copyOf(arr,length)
从arr原数组中复制指定长度的元素到新数组
newCopy = arr[0]~arr[length-1]
b、Arrays.copyOfRange(arr,startIndex,endIndex)
从arr原数组在starIndex索引处的元素到endIndex处的元素复制到新数组里面
newCopy = arr[startIndex~[endIndex-1]
注:数组本身也是自带复制方法的即每个数组对象携带有clone方法,该方法用于数组的复制,该方法可以将数组中的全部元素给复制到新数组里面(数组.clone();)
补充:arraycopy方法
程序结构:
System.arraycopy(Object src,int srcPos,Object dest ,int desPos,int length);
传入五个参数,分别是:被复制数组,被复制数组起始索引,目标数组,目标数组起始索引,数组复制长度。
3.3数组元素的排序
常见的排序算法就有冒泡排序、快速排序、插入排序、归并排序等
a、冒泡排序:该排序算法讲究的就是冒泡即将数组元素从大到小依次排列
Arrays工具类提供了一个方法sort用于数组元素的排序:
Arrays.sort(arr)
Arrays类的sort方法使用了多种排序:首先sort里面有个阈值,根据阈值去确定数组的具体排列方式
3.4数组元素查找
根据数组元素的值去查找该元素在数组中所对应的索引即根据值去找下标和索引
二分查找法:
二分查找法每次都需要二分
要求:数组必须是有序的
Arrays工具提供了方法binarySearch()
四、数组中元素查找的注意点
4.1根据索引去查询元素:
这种情况下不需要去遍历数组
4.2根据元素值去查询索引
五、二维数组
二维数组其实本质就是一个一维数组
我们知道数组是一个连续分配的内存空间,每个小格子里面存放着元素,二维数组则是指在每个小格子里面存放的数据是数组
5.1程序结构
5.1.1声明
数据类型[ ][ ] 数组名;
5.1.2初始化
a、动态初始化
数据类型[ ][ ] 数组名 = new 数组类型[4][6];
b、静态初始化
数据类型[ ][ ] 数组名 = {{1,2,3,4},{2,3,4,5}}
5.2二维数组的元素获取
5.2.1单个元素获取
数组名[num1][num2]
5.2.2 元素遍历
for-each遍历
for(int [ ] a1:arr1{
for (int a2:a1){
System.out.print(a2 + " ");
}
System.out.println();
}