当前位置: 代码迷 >> 综合 >> 数组初始和概念
  详细解决方案

数组初始和概念

热度:19   发布时间:2024-02-05 12:33:04.0

数组
什么是数组?
数组可以看做相同数据类型的数据的一个存储容器,可以对这些数据进行统一管理
在java中数组是一个源自底层的数据结构,同时也为了操作数组定义了一个java.util.Arravs类
不仅仅是在java中,在任何语言中,数组都是最基本的数据结构,它是一个用于存储连续的内存空间的集合,并且每个内存空间都有一个独一无二的编号,与之相对应的不连续的空间:叫链表
数组保存数据的特性
1、是一种引用数据类型
2、是一种连续的线性的数据结构
3、是一个数据的容器,用来存储其他数据,数组中可以存储任意元素的,但是每一维的数据类型必须一致
4、数组的长度不能直接改变,也就是说数组一旦确定,里面的元素个数不能改变
每个数组中都有一个默认的length属性,保存数组的长度(元素个数)
如果想要更改数组的长度,需要新创建一个数组,然后把原数组中内容依次复制过去
在复制过程中可以进行删除和添加
5、数组下标从0开始
数组声明
1、静态声明
在知道数中每个元素的情况下,使用静态声明
数据类型[]  变量名  =  {数组元素};
int[] is ={  1, 2 ,3 ,4, ,55}
2、动态声明
就是预先不知道要保存的数据是什么值,但是我们需要先把空间划分好,需要使用动态声明,并且会使用对应的默认值去占位
整数:0     小数:0.0      布尔:false     字符:\u0000       引用:null
语法结构:
数据类型[]  变量名 =  new  数据类型[长度];
//创建一个int一维数组,有10个元素默认值为0
int[] is = new int [10];
数组特性
1、每个单独的数组中的元素类型必须一致
2、数组是引用数据类型,意味着占用两块空间
基本数据类型,保存的就是值
引用数据类型,保存的是内存地址的引用
3、数据操作:增删改查
结合数组特性,数组添加和删除慢,因为数组一旦确定长度不能更改,除非新建数组
查询和更改效率较高
操作
数组[下标]    查询
数组[下标] = 值  更改
数组遍历 
通过数组的length属性   作为终止条件进行数组的遍历
增强for循环foreach
for(数据类型    变量   :数组){
操作
}
把数组中每一个元素都赋值给前面的变量
然后执行操作这个变量即可(不需要下标了)
数据类型需要和数组中元素类型一致
下标循环
for(int 下标变量值=0;下标变量值<遍历对象的长度值;下标变量值++){ 
循环体 
} 
增强循环
for(元素类型t 元素变量x : 遍历对象obj){ 
语句; 
} 
方法调用数组的传递
我们之前调用方法时传递过int i 等基本类型,在调用时 直接m1(1);即可
如何传递数组
1 先声明一个数组类型的变量,然后调用方法时传递变量
2 直接在调用方法时传递一个数组对象
方法名(new 数据类型[]{数据})
注意 
int[]  arr1  = null;//没有堆内存数组对象
int[]   arr2 = new   int[0];有堆内存数组对象,但是里面没有数据
传值和传引用
传值:基本数据类型传递
对方把数据更改后,和调用处无关,没有任何影响
传引用:引用数据类型传递
对方把数据更改后,调用处的数据页会随之更改
数组复制
就是把某一个数组中的某些数据复制到另外一个数组中的某个位置上去
需要的必备数据:
1源数组  src
2源数组起始位置   srcPos
3目标数组   dest   
4 目标数组起始位置   destPos  
5复制元素个数  length
二维数组
我们可以使用数组保存多个数据
比如我们这个教室,坐着的都是大数据14期的学生,这个教室就相当于数组,我们就是数组中的元素
但是隔壁还有一个前端07期,里面都是07期的学生,
这两个教室都在1808,如果把07和14当成数组的话,1808就是二维数组
二维数组本质 就是一个平面数据结构(表)
二维数组中的元素都是一维数组
Scanner
接收控制台输入
排序算法
排序
很多情况下都需要对数据的大小进行排序,比如统计成绩,查询前三名
就需要按照成绩进行降序,然后取 0,1,2即可
冒泡排序
1 比较相邻的两个元素,如果第一个比第二大就交换位置
2 对每一对相邻的元素做相同的工作,从第一对一直比较到最后一对,比较一轮结束后,最后一个元素一定是最大的
3 针对所有元素,重复上面的步骤,除了最后一个元素
4 持续循环中,比较次数越来越少,一直剩下一个数据(没有一对了,只有一个了),比较结束
实现 : 
1 嵌套循环,因为循环一次只能查询出一个最大或者最小
2 因为每次循环之后,最后一个不需要比较,所以每次循环,循环的次数都会减一,所以内层循环的循环次数取决于外层
3 需要一个临时变量交换数据
选择排序
1 每次都把当中最小的放到最左边
2 先拿出第一个元素,假设这个元素是最小的元素,然后挨个和后面所有比较,全部比较完之后,如果有比第一个小的,就交换位置,把这个最小的放到第一位
3 交换需要临时变量
二分法
当数据过大的时候,想要查找某个数据,并不是一件容易的事,尤其是我们要找的数据可能在最后几条,如果依次比较数据,效率太低
1 必须建立在已经排序的基础之上
2 没有重复数据
算法实现 : 
1 确定数据的开始位置和结束位置
2 确定数据的中间位置,判断中间位置元素是否是目标数据,如果是,就直接返回中间数据对应的下标
3 如果不是,分为两种
1 目标数据大于中间数据
起始值 = 中间值 + 1 , 结束值不变
2 目标数据小于中间数据
结束值 = 中间值 - 1 , 起始值不变
3 更改起始值或结束值之后,必须重新计算中间值
4 终止条件 : 当起始值大于结束值的时候,说明没有这个目标数据

  相关解决方案