Java数组的理解与运用
1、什么是数组?
数组是用来存放多个相同类型的变量的集合体。在内存中是连续存储的。
可以理解为:定义了一个数组就相当于一次定义了相同类型的多个变量。
如:int a[] ={5,6,7,8}; 就是一次定义了4个int型的变量,其值为:5,6,7,8。
2.什么是数组元素?
构成数组的每一个变量就称为一个数组元素。通常通过数组下标来表示。
3.什么是数组下标?
下标就是数组元素在数组中的位置。在一个数组中下标是从0开始,依次累加1到数组长度减1。特别注意不是从1开始而是从0开始的。
如:int a[] ={5,6,7,8}; a[0]=5,a[1]=6,a[2]=7, a[3]=8;
4.什么是数组长度?
数组长度就是数组中元素的个数。
数组长度也叫数组大小。
获取数组长度的方法:数组名.length
如:int a[] ={5,6,7,8}; 数组长度为:a.length =4。
注意:数组长度是在为数组元素分配内存是就确定的大小,一旦确定就不可在改变。
5.一维数组使用
数组使用分为四步:
(1)定义数组
数据类型 数组名 [ ]; 或 数据类型 [ ] 数组名;
例如 :int score[ ]; 或 int [ ] score;
语法解析:
1.数组是什么数据的类型,数组元素就是就是什么数据类型。
2.数组的特征是 [ ]。
3.数组是引用类型。
定义数组本质就是想JVM申请内存,JVM将内存分为方法区、堆、栈三部分,不同部分存储不同类型数据。定义数组时,JVM将数组名称存储在栈中,栈是一个先进后出的数据结构。数组内容则是存储在堆中的数组元素的首地址(用首地址代表存放数组元素的整块地址)。
(2)为数组元素分配内存
声明数组时仅指定了数组名称和元素的类型,并没有指定数组个数,也没有为数组元素分配内存,所以无法使用数组存储元素。想要系统为数组元素分配存储空间,就必须指出数组元素个数,并通过new运算符为数组元素分配空间。(通过new运算符分配的元素都存储在堆中)
为数组元素分配内存空间语法格式:
数组名 = new 数据类型[数组长度];
例如:score = new int [5](score 数组中有int 型的5个数据)
注:(1)和(2)合并在一起写: int []score = new int [5]; 此时数组长度已定为 5,永不可改。
(3)数组元素初始化
数组声明并为数组元素分配空间后,必须为数组元素初始化(赋值)后才能使用数组。如果没有为数组初始化,数组元素也有默认值如下表:
一般通过数组下标为数组元素初始化。
例如:
score[0][=60;
score[1]=70; ......
score[4]=90;
注:(1)、(2)、(3)也可以合在一起写: int [ ]score = new int[ ]{60,54,63,25}; 或 int score[ ] = new int[ ]{60,54,63,25}; 或 int [ ]score ={60,54,63,25}; 特别注意在这三个方式中[]里面皆不可再写长度。
(4)使用数组:
一般使用数组求最大值,最小值,平均值,求和以及排序和查找等。
例如:创建一个成绩的数据,统计最大值,最小值,平均值,求和。
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int []score = new int[5];
//成绩初始化
for (int i = 0; i < score.length; i++) {
System.out.println("请输入第"+(i+1)+"个学生的成绩");
score[i]= s.nextInt();
}
//求最高分,求最低分
int max = score[0];
int min = score[0];
for (int i = 1; i < score.length; i++) {
if(max<score[i]){
max = score[i];
}
if(min>score[i]){
min = score[i];
}
}
System.out.println("最高分为"+max);
System.out.println("最低分为"+min);
//总分
int sum = 0;
for (int i = 0; i < score.length; i++) {
sum += score[i];
}
System.out.println("班级总分:"+sum);
System.out.println("班级平均分"+sum/score.length);
}
排序中常用冒泡、选择、插入排序等。
冒泡排序:
选择排序:
插入排序:
查找一般使用二分法:
注意:二分查找是先排序之后在查找。
排序:
查找:
结果:
数组的工具类Arrays:
1.判断两个数组是否相等:Arrays.equals()
2.将数组转换成字符串:Arrays.toString()
结果:
3.对数组元素进行升序排序:Arrays.sort()
结果:
4.将数组所有元素赋值为相同的值:Arrays.fill(数组,值);
结果:
5.将数组赋值成一个长度为设定值的新数组:Arrays.copyOf(数组,长度)
结果:
6.查询元素在数组中的下标:Arrays.binarySearch(数组,查找值)
结果:
分析:
若找到了数据,则返回该数据的下标
若找不到数据,则返回负数,其值为该数据在数组中排序的位置
二维数组使用:
语法与一维数组类似
(1)定义数组
数据类型 数组名 [ ][ ]; 或 数据类型 [ ] [ ] 数组名;
例如 :int score[ ][ ]; 或 int [ ] [ ]score;
[ ] [ ]表示二维,第一个[ ] 表示第一维,第二个[ ] 表示第二维。
(2)为数组元素分配内存
int score[ ][ ];
score=new int[3][3]; //三行三列共九个数据
(3)数组元素初始化
int score[ ][ ]=new int[ ][ ]{{1,2,3},{4,5,6},{7,8,9}};或
int score[ ][ ]={{1,2,3},{4,5,6},{7,8,9}};
(4)使用数组:
有三个班级,每个班级3名学生,计算班级总成绩:
结果: