数组:包含一维数组和二维数组,对于二维数组可以看成一维数组又作为另一个数组的元素而存在。
一.关于一维数组的声明和初始化
//int[] arr=new int[] {1,2,3};
//静态初始化
int[][] arr1={{1,2,3},{4,5},{6,7,8}};
//动态初始化
一维数组的遍历:
for(int i=0;i<arr1.length;i++) {
System.out.println(arr1[i]);
}
二维数组的遍历:
for(int i=0;i<arr1.length;i++) {
for(int j=0;j<arr1[i].length;j++) {
System.out.print(arr1[i][j]+" ");
}
System.out.println();
}
l两者的区别 :二维数组需要进行两次遍历,第一次是进行行遍历,第二次是需要进行列遍历
二.关于数组中的一些常用方法
1.数组的复制
public class hqh {
public static void main(String[] args) {
String[] arr=new String[] {"hh","nn","mm"}; //数组的复制(区别于赋值(arr1=arr))
String[] arr1=new String[arr.length];
for(int i=0;i<arr1.length;i++) {
arr1[i]=arr[i];
System.out.println(arr1[i]);
}
}
}
2.数组的反转
//方法一
public class hqh {
public static void main(String[] args) {
//数组的反转
String[] arr=new String[] {"hh","nn","mm"};
for(int i=0;i<arr.length/2;i++) {//只需要交换一半,如果全部交换会位置不会动
String temp=arr[i];
arr[i]=arr[arr.length-i-1];
arr[arr.length-i-1]=temp;
}
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+"\t");
}
//方法二
String[] arr=new String[] {"hh","nn","mm"};
for(int i=0,j=arr.length-1;i<j;i++,j--) {
String temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+"\t");
}
3.查找元素之线性查找
public class hqh {
public static void main(String[] args) {
String[] arr=new String[] {"hh","nn","mm"};
String dest="hh";
boolean isFlag=true;
for(int i=0;i<arr.length;i++) {
if(dest.equals(arr[i])) {
System.out.println(i);
isFlag=false;
break;
}
}
if(isFlag) {
System.out.println("没有找到");
}
}
}
查找元素之二分法查找
public class hqh {
public static void main(String[] args) {
int[] arr2=new int[] {23,25,66,68,89,102,103,108,111,888};
int dest=888;
//初始首索引
int head=0;
//初始尾索引
int end=arr2.length-1;
boolean isFlag=true;
while(head<=end) {
int middle=(head+end)/2;
if(dest==arr2[middle]) {
System.out.println("找到了指定元素,位置为:"+ middle);
isFlag=false;
break;
}else if(dest<arr2[middle]) {
end=middle-1;
}else {
head=middle+1;
}
}
if(isFlag) {
System.out.println("没有找到");
}
}
}