我的Java学习之路(第十九天)------ 数组的复制、反转、查找(线性查找、二分法)

(参考:尚硅谷_宋红康_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("抱歉,没有找到");
	}
}
}

发布了49 篇原创文章 · 获赞 65 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/104154721
今日推荐