一、数组的概念
1、概念:一组连续的存储空间,存储多个相同数据类型的值。
2、特点:(1)类型相同;(2)长度固定。
二、数组的创建与组成
1、数组的创建
(1)先声明、再分配空间:
数据类型[] 数组名;
数组名 = new 数据类型[长度];
public class TestCreate{
public static void main(String[] args){
int[] array1;
array1 = new int[5];
}
}
(2)声明并分配空间:
数据类型[] 数组名= new 数据类型[长度];
public class TestArrayCreate{
public static void main(String[] args){
int[] a = new int[5];
}//声明int数组类型变量,定义变量名为a;并为其分配长度为5的连续空间。
}
(3)声明并赋值(繁):
数据类型[] 数组名 = new 数据类型[]{value1,value2,…};
public class TestCreate{
public static void main(String[] args){
int[] array2= new int[]{1,2,3}; //int[]中不用写长度
}
}
(4)声明并赋值(简)
数据类型[] 数组名= {value1,value2,…};//显示初始化,不可换行
public class testCreate{
public static void main(String[] args){
int[] array3= {1,2,3};
}
}
注:常用第(2)、(3)种
2、数组的组成
| 数组元素 | 元素1 | 元素2 | 元素3 | 元素4 | 元素5 |
|---|---|---|---|---|---|
| 下标/索引 | 0 | 1 | 2 | 3 | 4 |
(1)数组中的每个数据格被称为“数组元素”;
(2)对每个元素进行赋值或取值的操作被称为“元素的访问”;
(3)访问元素时,需要使用“下标”(从0开始,依次加一,自动生成);
(4)访问语法:数组名[下标];
三、数组的赋值与取值
赋值:数组名[下标] = 值;
取值:数组名[下标]
public class TestCreateArray{
public static void main(String[] args){
int[] a=new int[5]; //创建数组
a[0]=5; //依次赋值
a[1]=3;
a[2]=4;
a[3]=1;
a[4]=6;
System.out.println(a[0]); //依次取值
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
System.out.println(a[4]);
}
}
注意:(1)有效下标范围:0~数组长度-1;(2)若访问无效下标,会导致数组下标越界,系统抛出:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException:无效下标。
四、数组的遍历
从头至尾,逐一对数组的每个元素进行访问
public class TestCreateArray{
public static void main(String[] args){
int[] a=new int[5]; //创建数组
a[0]=5; //依次赋值
a[1]=3;
a[2]=4;
a[3]=1;
a[4]=6;
System.out.println(a[0]); //依次取值
System.out.println(a[1]);
System.out.println(a[2]);
System.out.println(a[3]);
System.out.println(a[4]);
for(int i=0;i<=4;i++){ //初始i取0,循环5次
System.out.println(a[i]);
}
/*
for(int i=0;i<a.length;i++){ //动态获取数组长度使用:数组名.length
System.out.println(a[i]);
}
*/
}
}
五、数组元素的默认值
1、在没有为数组元素赋值的情况下,依旧可以正确访问;
2、各类型数组默认值:
| 整数 | 小数 | 字符 | 布尔 | 其他 |
|---|---|---|---|---|
| 0 | 0.0 | \u0000 | false | null |
六、实际应用
1、统计数组中元素的平均值
给定一个·整数数组,统计数组中所有元素的平均值
public class TestAvgGet{
public static void main(String[] args){
int[] num=new int[]{34,56,23,77,45};
int sum=0;
for(int i=0;i<num.length;i++){
sum+=num[i];
}
double avg=sum/num.length;
System.out.println(avg);
}
}
2、查找数组中的元素是否存在
给定一个整数数组,读入一个整数n,如果n在数组中存在,输出其下标,不存在则输出-1
import java.util.Scanner;
public class TestSearchNum{
public static void main(String[] args){
int[] num=new int[]{1,4,67,34,99,2,5,75,56};
Scanner input=new Scanner(System.in );
System.out.println("请输入一个整数:");
int n = input.nextInt();
int index=-1; //代表n不在数组中
for(int i=0;i<num.length;i++){ //循环查找
if(n==num[i]){
index=i; //改变index,代表n所出现的下标
break;
}
}
System.out.println(index);
}
}
3、数组的排序
(1)JDK排序:java.util.Arrays.sort(数组名); //JDK提供,升序排序
import java.util.Arrays;//导包
public class TestSort{
public static void main(String[] args){
int[] num=new int[]{4,2,3,6,5,1};
Arrays.sort(num);
for(int i=0;i<num.length;i++){
System.out.println(num[i]);
}
}
}
(2)降序排序
import java.util.Arrays;
public class TestSort{
public static void main(String[] args){
int[] num=new int[]{4,2,3,6,5,1};
//先升序
Arrays.sort(num);
/*for(int i=0;i<num.length;i++){
System.out.println(num[i]);
}
*/
//再降序
for(int i=0;i<num.length/2;i++){
int s=num[i];
num[i]=num[num.length-1-i];
num[num.length-1-i]=s;
}
for(int i=0;i<num.length;i++){
System.out.println(num[i]);
}
}
}