学习Java第四天

一、数据结构

数据结构是计算机中用于存储和组织的数据的一种方式

数据结构它是指相互之间存在一种或多种特定的数据集合(容器)

数据结构:数组、链表、树、图、队列等

二、数组

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();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值