数组的复制:
来看下面的题目:
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;
}
}
}
}