数组
1.一维数组
定义数组
在Java中,定义数组的语法有如下两种
数据类型[] 数组名=new数据类型[数组长度]
或:
数据类型 数组名[]=new数据类型[数组长度]
- 定义数组时一定要指定数组名和数组类型。
- 必须书写"[]",表示定义了一个数组,而不是一个普通的变量。
- “[数组长度]”决定连续分配的空间个数,通过数组的length属性可获取此长度。
- 数组的数据类型用于确定分配的每个空间的大小。
数组元素类型 | 默认初始值 |
byte、short、int、long | 0 |
float、double | 0.0 |
char | “\u0000" |
boolean | false |
引用数据类型 | null |
2.数组元素的表示与赋值
例如:
scores[0]=65;//表示为scores数组中的第一个元素赋值65
scores[1]=87;//表示为scores数组中的第二个元素赋值87
3.数组的初始化
数组初始化的语法格式:
数据类型[]数组名={值1,值,值3,……,值n};
或者:
数据类型[]数组名=new数据类型[]{值1,值2,值3,……,值n};
int scores[]={75,67,90,100,0};//创建一个长度为5的数组scores
或:
int scores[]=new int[]{75,67,90,100,0};
4.遍历数组
在编写程序时,数组和循环往往结合在一起使用,可以大大地简化代码,提高程序的编写效率。通常使用for循环遍历数组
创建整型数组,循环输出数组元素
实现步骤:
(1)初始化整型数组
(2)以循环变量i为数组下标,循环输出数组元素
示例:
public static void main(String[] args) {
int scores[]= {75,67,90,100,0};//创建有五个元素的整型数组
for(int i=0;i<scores.length;i++) {//length等于5
//每次循环i的值相当于数组下标
System.out.println("scores["+i+"]="+scores[i]);
}
}
增强for循环
语法:
for(元素类型 变量名:要循环的数组或集合名){……}
第一个元素类型时数组或集合中元素的类型,变量名在循环时用来保存每个元素的值,冒号后面是要循环的数组或集合名称。
步骤:
(1)初始化整型数组
(2)使用增强for循环
示例:
public class For1 {
public static void main(String[] args) {
int scores[]= {75,67,90,100,0};
for(int i:scores) {
System.out.println("数组元素值依次为:"+i);
}
}
}
注意:变量i的类型必须和数组scores元素的类型保持一致。
数组添加
public static void main(String[] args) {
//数组添加
int index=0;
String[] phones= {"iPhone4","iPhone4s","iPhone5",null};
for(int i=0;i<phones.length;i++) {
if(phones[i]==null) {
index=i;
break;
}
}
if(index!=0) {
phones[index]="iPhone5S";
for(int i=0;i<phones.length;i++) {
System.out.println(phones[i]);
}
}else {
System.out.print("数组已满");
}
}
}
分析:
index变量相当于一个”监视器“。赋初始值”-1“是为了和数组下标的0、1、2等区别开来。遍历数组中的元素,如果发现null就会把i赋值给index,相当于找到null的下标,此时使用break跳出循环。
随后进入下一个if语句,首先判断index的值是否发生了变化,如果有变化(不等于-1时),说明发现了null的元素,phones[index]=”iPhone5S“;因为index在上一个if语句中已经重新赋值为null下标值,这时直接找到那个空的位置赋值为”iPhone5S“即可
数组修改
public static void main(String[] args) {
//数组修改
int indexNew=-1;
String[] phones= {"iPhone3G3经典","iPhone4革新","iPhone4s变化不大","iPhone5"};
for(int i=0;i<phones.length;i++) {
if(phones[i].equals("iPhone5")) {//equals()方法用来比较值是否相等
indexNew=i;
break;
}
}
if(indexNew!=-1) {
phones[indexNew]="iPone5掉漆";
for(int i=0;i<phones.length;i++) {
System.out.println(phones[i]);
}
}else {
System.out.print("不存在iphone5");
}
}
分析:
第一个if语句的作用与数据添加类似,第二个if语句的作用是找到修改的位置,对该位置重新赋值。
数组删除
public static void main(String[] args) {
//数组删除
String[] phones= {"iphone3GS经典","iphone4革新","iPhone4变化不大","iPhone5掉漆"};
int index=-1;
for(int i=0;i<phones.length;i++) {
if(phones[i].equals("iphone3GS经典")) {
index=i;
break;
}
}
if(index!=-1) {
for(int i=index;i<phones.length-1;i++) {
phones[i]=phones[i+1];
}
phones[phones.length-1]=null;
}else {
System.out.println("没有您要删除的内容!");
}
for(int k=0;k<phones.length;k++) {
System.out.println(phones[k]);
}
}
}
分析
“phones[i]=phones[i+1];"表示此程序从0位置开始把1位置的值向前移一位,”phones.length-1"等于3,当i的值等于3的时候,停止for循环,这时把最后以为赋值给null,此时数组中的“iPhone3GS”被删除,后面的数据也完成了移位。
二维数组
二维数组的使用
1.初始化二维数组
代码:
int[][] scores=new int[][]{{90,85,92,78,54},{76,63,80},{87}};
或者:
int scores[][]={{90,85,92,78,54},{76,63,80},{87}};
90 | 85 | 92 | 78 | 54 |
76 | 63 | 80 | ||
87 |
2.Arrays类
方法 | 返回类型 | 说明 |
equals(array1,array2) | boolean | 比较两个数组是否相等 |
sort(array) | void | 对数组array的元素进行升序排列 |
toString(array) | String | 将一个数组array转换成一个字符串 |
fill(array,val) | void | 把数组array的所有元素都赋值为val |
copyOf(array,length) | 与array数据类型一致 | 把数组array复制成一个长度为length的新数组 |
binarySearch(array,val) | int | 查询元素val在数组array中的下标 |
Arrays类的应用
1.比较两个数组是否相等
Arrays类的equals()方法用于比较两个数组是否相等,相等为true;否则为false。
public static void main(String[] args){
int[]arr1= {10,50,40,30};
int[]arr2={10,50,40,30};
int[]arr3= {60,50,85};
System.out.println(Arrays.equals(arr1,arr2));//判断arr1,arr2的长度及元素是否相等
System.out.println(Arrays.equals(arr1,arr3));//判断arr1,arr3的长度及元素是否相等
}
2.对数组的元素进行升序排列
- 初始化一个整型二维数组
- 使用for循环遍历二维数组
- 使用Arrays类的sort()方法对二维数组的元素进行升序排列
- 使用for循环遍历二维数组的元素并输出
public static void main(String[] args){
int array[][]= {{80,66},{70,54,98},{77,59}};
for(int i=0;i<array.length;i++) {
String str=(i+1)+"班";
Arrays.sort(array[i]);//升序
System.out.println("成绩排序后:"+str);
for(int j=0;j<array[i].length;j++) {
System.out.println(array[i][j]);
}
}
3.将数组转换成字符串
public static void main(String[] args){
int[]arr= {10,50,40,30};
Arrays.sort(arr);//将数组按升序排列
System.out.println(Arrays.toString(arr));//将数组arr转换为字符串并输出
}
4.将数组所有元素赋值为相同的值
public static void main(String[] args){
int[] arr= {10,50,40,30};//初始化整型数组
Arrays.fill(arr,40);//替换数组元素
System.out.println(Arrays.toString(arr));//将数组arr转换为字符串并输出
}
5.将数组复制成一个长度为设定值的新数组
public static void main(String[] args){
int[] arr1= {10,50,40,30};
int[]arr2=Arrays.copyOf(arr1,3);//将aar1复制成长度为3的新数组arr2
System.out.println(Arrays.toString(arr2));
int[]arr3=Arrays.copyOf(arr1,4);//将arr1复制成长度为4的新数组arr3
System.out.println(Arrays.toString(arr3));
int[]arr4=Arrays.copyOf(arr1,6);//将arr1复制成长度为6的新数组arr3
System.out.println(Arrays.toString(arr4));
}
6.查找元素在数组中的下标
public static void main(String[] args){
int[]arr= {10,50,40,30};
Arrays.sort(arr);//先按升序排列
int index=Arrays.binarySearch(arr,30);//查找30的下标
System.out.println(index);
index=Arrays.binarySearch(arr,50);//查找50的下标
System.out.println(index);
}