数组的复制、反转、查找

数组的复制:

来看下面的题目:

在这里插入图片描述

package com.my.nonworking;
/**
 * 
 * @Desciption
 * @author Abraham 
 * @email 1290807550@qq.com
 * @version JDK1.8
 * @date 2021年3月17日下午1:33:50
 */
public class Array09 {
	public static void main(String[] args) {
		int[] arr01,arr02;
		arr01= new int[] {2,3,5,7,11,13,17,19};
		for(int i=0;i<arr01.length;i++) {
			System.out.print(arr01[i]+"\t");
		}
		arr02=arr01;
		System.out.println("====================");
		for(int i=0;i<arr02.length;i++) {
			if(i%2==0) {
				arr02[i]=i;
				
			}
			
		}
		
		for(int i=0;i<arr01.length;i++) {
			System.out.print(arr01[i]+"\t");
		}
	
		
		
	}

}
//2	3	5	7	11	13	17	19	====================
//0	3	2	7	4	13	6	19

为什么会这样呢?看下图解析:

在这里插入图片描述

如果要发生下图所示复制一个真正意义上的数组,要如何操作?

在这里插入图片描述


数组的复制:

来看代码

package com.my.nonworking;
/**
 * 
 * @Desciption
 * @author Abraham 
 * @email 1290807550@qq.com
 * @version JDK1.8
 * @date 2021年3月17日下午2:03:56
 */
public class Array10 {
	public static void main(String[] args) {
		
		int[] arr01;
		arr01= new int[] {2,3,5,7,11,13,17,19};
		for(int i=0;i<arr01.length;i++) {
			System.out.print(arr01[i]+"\t");
		}
		int[] arr02;
		arr02= new int[arr01.length];//new一个新的数组
		//下面是循环赋值,复制了一个数组
		for(int i=0;i<arr02.length;i++) {
		arr02[i]=arr01[i];}
		
		for(int i=0;i<arr02.length;i++) {
			if(i%2==0) {
				arr02[i]=i;
			}
		}
		System.out.println();
		for(int i=0;i<arr01.length;i++) {
			System.out.print(arr01[i]+"\t");
		}
		
		
		
		
		
	}

}
//2	3	5	7	11	13	17	19	
//2	3	5	7	11	13	17	19	

数组的反转:

package com.my.nonworking;
/**
 * 
 * @Desciption
 * @author Abraham 
 * @email 1290807550@qq.com
 * @version JDK1.8
 * @date 2021年3月17日下午2:21:03
 */
public class Array11 {
	//算法的考察:数组的复制,反转,查找(线性查找,二分法查找)
	public static void main(String[] args) {
		
		String[] arr=new String[] {"你好","我好","他好","大家好"};
		
		//方法一:
		//for(int i=0;i<arr.length/2;i++) {
			//String Arr=arr[i];
			//arr[i]=arr[arr.length-i-1];
			//arr[arr.length-i-1]=Arr;
			
		//}
		//for(int i=0;i<arr.length;i++)
		//{System.out.print(arr[i]+"\t");}
		
		//方法二:
		
		for(int i=0,j=arr.length-1;i<arr.length/2;i++,j--) {
			String Arr=arr[i];
			arr[i]=arr[j];
			arr[j]=Arr;
			
		}
		for(int i=0;i<arr.length;i++)
		{System.out.print(arr[i]+"\t");}		
		
		
	}

}
//大家好	  他好	我好	  你好

数组的查找:

线性查找:

package com.my.nonworking;
/**
 * 
 * @Desciption
 * @author Abraham 
 * @email 1290807550@qq.com
 * @version JDK1.8
 * @date 2021年3月17日下午4:45:07
 */
public class Array12 {
	public static void main(String[] args) {
		//线性查找:
		//再数组中找对与之相等的值,并且输出该值的角标
		String[] arr=new String[] {"你好","我好","他好","大家好"};
		String Arr="我好";
		boolean flag=true;
		for(int i=0;i<arr.length;i++) {
			//用equals也可以。
			if(Arr==arr[i]) {
				flag=false;
			System.out.println("arr[i]的角标i="+i);
				
				break;
			}
			
		}
				
	}

}

二分法查找:

说明:适合有规律的数组,比如从大到小排列或者从小到大排列

在这里插入图片描述

package com.my.nonworking;
/**
 * 
 * @Desciption
 * @author Abraham 
 * @email 1290807550@qq.com
 * @version JDK1.8
 * @date 2021年3月17日下午5:42:29
 */
public class Array13 {
	public static void main(String[] args) {
		int[] arr=new int[] {5,7,9,10,12,15,16,18,20,21,26,30,33,35,36,38,40,45,46,50,56,60,63,64,68,70,75,78,80,81,83,84,88,89,90,92,94,95,97,99,101};
		int res=15;
		int head=0;//初始首角标
		int end=arr.length-1;//初始末角标
		
	
		while(head<=end) {
			int mid=(head+end)/2;
			if(res==arr[mid]) {
				System.out.println(arr[mid]+"在数组中的角标是"+mid);
				
				break;}
			else if(res<arr[mid]) {
				end=mid-1;
				
			}
			else{
				head=mid+1;
			}
			
			
		}
		
		
		
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值