本章概述
1.一维数组入门①数组定义、特点、内存分配②使用一维数组存储数据③for-each循环2.一维数组的应用①查询元素②数组类型做形参③查询最大值最小值④添加元素或删除元素⑤冒泡排序⑥Arrays工具类⑦理解main(String args[])⑧可变参数▪ 3.二维数组:二维数组含义、特点、内存分配、举例
数组的特征:
* 1.定义数组必须指定大小
* 2.数组的每一个元素的内存都是连续的
* 3.数组的随机访问操作,是一个常量时间 arr[index]
* 4.每一个数组都内置了一个成员变量 length,表示数组的总长度
* 5.数组增加元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的时间是线性时间
* 6.数组删除元素,涉及增加位置后面的所有元素都要进行移动,所以该操作花费的是时间线性时间
* 7.数组的元素查找花费时间为线性时间,逐个遍历
上面的数组的特征转自 java中的数组 - acehm - 博客园
创建数组 (1)
▪ 数组是相同类型数据的有序集合.– 相同类型的若干个数据,按照一定先后次序排列组合而成。– 其中,每一个数据称作一个数组元素– 每个数组元素可以通过一个下标来访问它们.▪ 数组特点:– 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。– 其元素必须是相同类型,不允许出现混合类型。– 数组中的元素可以是任何数据类型,包括基本类型和引用类型。▪ 数组属引用类型– length, elements of the array
数组概述 (2)
• 数组是一个变量,存储相同数据类型的一组数据![]()
声明一个变量就是在内存空间划出一块合适的空间
声明一个数组就是在内存空间划出一串连续的空间
**数组的定义:**
数组是*相同类型*数据的*有序*集合。数组描述的是相同类型的若干个数据,
按照一定的先后次序排列组合而成。其中,每一个数据称作一个元素,
每个元素可以通过一个索引(下标)来访问它们。
数组的三个基本特点:
1、长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
2、其元素必须是相同类型,不允许出现混合类型。
3、数组类型可以是任何数据类型,包括基本数据类型和引用类型。
数组变量属引用类型,数组本身就是对象,数组中的每个元素相当于该对象的成员变量。
Java中对象是在堆中的,因此数组无论保存基本数据类型还是其他对象类型,数组对象本身是在堆中存储的。
**数组声明**
数组的声明方式有两种(以一维数组为例)
1、type[ ] arr_name;//推荐使用这种方式)
2、type arr_name[ ] ;
**注意事项:**
1、声明的时候并没有实例化任何对象,只有在实例化数组对象时,JVM才分配空间,这时才与长度有关。
2、声明一个数组的时候并没有数组真正被创建。
3、构造一个数组,必须指定长度。
**创建基本类型一维数组:**
public class Test{
public static void main(String[ ] args){
int[ ] s = null; //声明数组
s = new int[10];//给数组分配空间
for(int i =0;i<10;i++){
s[i] = 2*i+1;//给数组元素赋值
System.out.println(s[i]);
}
}
}
上面的数组的定义转自 数组概述和特点_LeonMathilda的博客-优快云博客_数组的特点
数组概述 3
• 数组只有一个名称,即标识符• 元素下标标明了元素在数组中的位置,从0开始• 数组中的每个元素都可以通过下标来访问• 数组长度固定不变,避免数组越界![]()
小结▪ 下列类型是什么?“刘星”,“夏雨”,“夏雪” String字符串类型 8,98,“c”,23 类型不同 98.1,341.2,34.3 double类型
如何使用数组
使用数组四步走:
空间 1、声明数组 int[] a; 空间 2、分配空间 a=new int[5]; 空间 3、赋值 a[0] =8; 空间 4、处理数据 a[0] =a[0]*10; a[0]——> 0 a
声明数组
声明数组: 告诉计算机数据类型是什么
int[ ] score1; //Java成绩
int score2[ ]; //C#成绩
String[ ] name; //学生姓名
数据类型 数组名[ ]; []是 声明数组时不规定数组长度
数据类型[ ] 数组名 ;
分配空间
分配空间: 告诉计算机分配几个连续的空间 score = new int[30]; avgAge = new int[6]; name = new String[30]; 声明数组并分配空间 数据类型[ ] 数组名 = new 数据类型[大小] ;
数组赋值
▪ 赋值:向分配的格子里放数据
score[0] = 89;
score[1] = 79;
score[2] = 76;
……
方法1: 边声明边赋值
int[ ] score = {89, 79, 76};
int[ ] score = new int[ ]{89, 79, 76};
不能指定数组长度
方法2:动态地从键盘录入信息并赋值
Scanner input = new Scanner(System.in);
for(int i = 0; i < 30; i ++){
score[i] = input.nextInt();
}
处理数据
对数据进行处理:计算5位学生的平均分
//成绩单: 60 80 90 70 85 int [ ] score = {60, 80, 90, 70, 85}; double avg; //访问数组成员:使 用“标识符[下标]” avg = (score[0] + score[1] + score[2] + score[3] + score[4])/5; int [ ] score = {60, 80, 90, 70, 85}; int sum = 0; double avg; //数组的length属性 for(int i = 0; i < score.length; i++){ sum = sum + score[i]; //[i]访问成员 } avg = sum / score.length
使用数组求平均分
public static void main(String[] args){
int[] scores =new int[5]; //成绩数组
int sum =0;
Scanner input = new Scanner(System.in);
System.out.println("请输入5位学员的成绩:");
for(int i =0; i<scores.length;i++){
scores[i] = input.nextlnt();
sum =sum +scores[i]; //成绩累加
}
System.out.println("平均分:"+(double)sum/scores.length);
}
常见错误3-1
public class ErrorDemo1 {
public static void main(String[ ] args){
int[] score =new int[]; // 编译出错,没有写明数组的大小
score[0] = 89;
score[1] = 63;
System.out.println(score[0]);
}
}
常见错误3-2
public class ErrorDemo2 {
public static void main(String[ ] args) {
int[ ] scores = new int[2];
scores[0] = 90;
scores[1] = 85;
scores[2]=65;//编译出错,数组越界
System.out.println(scores[2]);
常见错误3-3
public static void main(String[ ] args){
int[ ] score = new int[5];
//编译出错,创建数组并赋值的方式必须在一条语句中完成
score ={60,80,90,70,85}
int[ ] score2;
//编译出错,创建数组并赋值的方式必须在一条语句中完成
score2 ={60、80、90、70、85};
}