4.数组
数组是重要的数据结构之一,使用数组可以帮我们快捷的解决很多实际问题。
什么是数组?
数组是具有相同类型的一组数据的集合。例如:球类的集合——足球、篮球、乒乓球等;电器集合——电视机、空调、洗衣机等。在程序设计中将这些集合称为数组。根据数组的维数将数组分为一维数组、二维数组…
4.1一维数组
一维数组实质上是一组相同类型数据的线性集合,在程序中需要处理一组数据,或者传递一组数据时,可以应用这种类型的数组。
4.1.1一维数组的定义
一组类型相同的存储空间的表示。
4.1.2一维数组的长度
一组可以包含的元素数量:0~N(N的最大值取决于内存),即数组的长度为length,并且元素从0到length-1。
4.1.3一维数组的创建步骤
主要分为4个步骤:
1.数组的声明:
语法:
数据类型[] 数组名; 或者 数据类型 数组名[];
如:int[] array;
一般Java中推荐使用前面那种,后者属于c++的写法。
2.分配空间
语法:
数组名称 =new 数据类型[空间数量];
如:array = new int[10];
分配好的数组都会有默认的初值:各种不同类型的数组初值如下:
char:0或’\u0000’
Stirng: null
byte/short/int/long: 0
float/double: 0
boolean: false
空间数量即数组的长度
3.赋值
语法:
数组名称[下标] = 值;
如:array[0] = 1;
数组的下标从0开始,到length-1结束,如果数组的下标超出length-1则会出现数据越界异常:
java.lang.ArrayIndexOutOfBoundsException:-1
4.使用
如:System.out.println(array[0]);
5.数组声明的同时分配空间
语法:
数据类型[] 数组名称 = new 数据类型[空间数量];
如:int[] array = new int[10];
6.声明+分配空间+赋值
语法1:
数据类型[] 数组名称 = new 数据类型[]{…};
语法2:
数据类型[] 数组名称 ={…};
通常我们使用第二种写法。
4.1.4增强型for
使用场合:完全遍历
快捷键:array+for
for(数据类型 val(变量): 遍历对象(数组名称)){
}
如:for(int t: array){
System.out.println(t);
}
注意:
1.遍历数组时数据类型要保证与原数组的类型相同
2.t为数组array中依次从最小下标0取出的值副本,不能用来赋值
4.2多维数组
多维数组可以看成是数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组。
二维数组:
如果一维数组中的各个元素仍然是一个数组,那么它就是一个二维数组。二维数组常用于表示表,表中的信息以行和列的形式组织,第一个下标代表元素所在的行,第二个下标代表元素所在的列。
二维数组的创建:
二维数组可以看做是特殊的一维数组,因此,二维数组的创建同样有两种方式。
1.先声明,再分配空间
语法:
数组元素的类型[][] 数组名称;
如:int array[][];
对于高维数组来说,有两种分配空间的方式:
1)直接为每一维分配内存空间
如:array = new int[2][4];它表示二维数组中有两个长度为4的一维数组。
2)分别为每一维分配空间
如:array = new int[2][];a[0] = new int[2]; a[1] = new int[3];
它表示二维数组由两个一维数组组成,第一个长度为2,第二个长度为3
2.声明的同时为数组分配空间
如:int[][] array = new int[2][3];.
4.3.数组的基本操作
4.3.1增强型for循环
使用场合:完全遍历
快捷键:array+for
for(数据类型 val(变量): 遍历对象(数组名称)){
}
如:for(int t: array){
System.out.println(t);
}
4.3.2向数组中插入一个值
示例:
//向长度固定的一维数组插入一个随机数,并按小到大排序
Scanner input = new Scanner(System.in);
//定义一个长度为6,值固定的一维数组
int[] array = {3,10,13,21,55,0};
System.out.print("请输入插入数值:");
int val = input.nextInt();
int i = 0;
//定位,寻找该数值应该处在的位置(从左向右定位)
for (; i < array.length-1; i++) {
//从0开始找,找一个比val大的位置
if(array[i]>val){
break;
}
}
//挪(从右向左挪),
for (int j = array.length-1; j > i; j--) {
array[j] =array[j-1];
}
//找到该值应该在的位置后,将其插入
array[i] = val;
for (int g : array) {
System.out.println(g);
}
4.3.3输入一个随机数,删除数组中与其重复的值
示例:
Scanner input = new Scanner(System.in);
int[] array = {3,10,13,21,55};
System.out.print("请输入插入值:");
int val = input.nextInt();
int i = 0;
//定位
for (; i < array.length; i++) {
if(array[i]==val){
break;
}
}
//如果没有
if(i==array.length){
System.out.println(val+"不存在");
}else{//如果有,删除掉
//挪
for (int j = i; j < array.length-1; j++) {
array[j] = array[j+1];
}
//最后一位元素赋值为0
array[array.length-1] = 0;
for (int g : array) {
System.out.println(g);
}