(参考:尚硅谷_宋红康_Java语言基础)
数组的复制
假定两个数组arr1与arr2,如果使用arr2 = arr1
,但是这个并不能实现数组的复制,因为在此时堆空间当中只有一个数组,arr2 = arr1
实现的仅仅是将arr1的地址复制给了arr2,让它们都指向堆空间的唯一的一个数组实体;
那如何真正意义上取实现数组的复制呢?
①其中一个方法就是使用遍历的额方式取逐个赋值
package de1;
public class Test2 {
public static void main(String[] args) {
int[] array1,array2;
array1 = new int[] {1,2,3,4,5};
array2 = new int[array1.length];
for(int i=0;i<array2.length;i++) {
array2[i] = array1[i];
}
System.out.println("Array1:");
for(int i:array1) {
System.out.println(i);
}
System.out.println("Array2:");
for(int i:array1) {
System.out.println(i);
}
}
}
②其他方式可以参考我以前写的博客
https://blog.csdn.net/solitudi/article/details/104014858
数组的反转
提供其中两种方式
①
package de1;
public class Test2 {
public static void main(String[] args) {
int[] arr = new int[] {1,2,3,4,5};
//数组的反转
for(int i =0;i < arr.length/2;i++) {
int temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
//数组的遍历
for(int x:arr) {
System.out.print(x+" ");
}
}
}
②与上面方法类似,当然还可以定义两个数组,只是比较麻烦
for(int i =0,j=arr.length-1;i<j;i++,j--){
int temp = arr[i];
arr[i] = arr[arr.length - i - 1];
arr[arr.length - i - 1] = temp;
}
数组的查找
线性查找
说简单点就是按顺序去查找
package de1;
public class Test2 {
public static void main(String[] args) {
String[] arr = new String[] {"aa","bb","cc","dd"};
String dest = "bb";
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("抱歉,没有找到");
}
}
}
二分法查找
前提:所要查找的数组必须有序
package de1;
public class Test2 {
public static void main(String[] args) {
int[] arr1=new int[] {-6,-3,0,1,3,5,9,56,58,99};
boolean isFlag = true;
int dest1 = 3;
//初始的首索引
int head = -3;
//初始的末索引
int end = arr1.length - 1;
while(head<=end) {
int mid = (head + end)/2;
if(dest1 == arr1[mid]) {
System.out.println("找到啦,索引为"+mid);
isFlag = false;
break;
}else if(arr1[mid] > dest1) {
end = mid -1;
}else {
head = mid + 1;
}
}
if(isFlag) {
System.out.println("抱歉,没有找到");
}
}
}