java基本语法(数组中-复制、反转和查找)
1.复制:深度复制(新建了一个空间)和浅度复制(两个数组名指向同一块地址)
package start; public class YuFa { public static void main(String[] args) { // 对于单个变量,复制值的时候都是深度复制,是新开辟了一块空间 int a = 4; int b = a; // 改变a的值,但b的值不变 a = 2; System.out.println("a的值变为2,此时b的值为:" + b); // 数组的浅度复制(两个数组名指向同一块地址) int[] c = new int[] {1,2,3}; int[] d = c; c[0] = 0; System.out.println("c[0]的值变为0,此时d[0]的值为:" + d[0]); // 数组的深度复制(新建了一个空间) c[0] = 1;//还原c数组 int[] e = new int[c.length]; for (int i = 0;i < c.length;i++) { e[i] = c[i]; } c[0] = 0; System.out.println("c[0]的值变为0,此时e[0]的值为:" + e[0]); } }
2.数组的反转
package start; public class YuFa { public static void main(String[] args) { int[] a = {1,2,3,4,6,0,8}; // 数组反转 方法一,数组的对半替换,a[i]与 a[a.length - i - 1]交换位置 for(int i = 0;i < a.length / 2;i++) { // 交换位置 int tmp = a[i]; a[i] = a[a.length - i - 1]; a[a.length - i - 1] = tmp; } // 打印出数组 for (int i = 0;i < a.length;i++) { System.out.print(a[i] + " "); } System.out.println(" "); // 数组反转 方法二,数组的对半替换,a[i]与 a[j]交换位置 for (int i = 0,j = a.length - 1;i < j;i++,j--) { int tmp2 = a[i]; a[i] = a[j]; a[j] = tmp2; } // 打印出数组 for (int i = 0;i < a.length;i++) { System.out.print(a[i] + " "); } } }
3.查找:包括线性查找和二分查找两种情况:
package start; public class YuFa { public static void main(String[] args) { // 变量初始化,要查找的元素和数组 int[] a = new int[] {1,3,4,6,7,10,90,45}; int destination1 = 100; String[] s = {"a","b","c","d","e","f","g"}; String destination = "c"; // 设置标志变量,方便判断是否找到 boolean isFlag = true; // 线性查找 for(int i = 0;i < s.length;i++) { if(s[i].equals(destination)) { isFlag = false; System.out.println("已经找到该元素,其下标(索引)为: " + i); break; } } if(isFlag) { System.out.println("抱歉,数组中不存在该元素"); } // 二分查找,查找的前提是数组是顺序排列的 isFlag = true; // 定义查找的范围,以及查找的中间元素 int head = 0; int end = a.length - 1; while(head <= end) { int middle = (head + end) / 2; if(a[middle] == destination1) { isFlag = false; System.out.println("已经找到该元素,其下标(索引)为: " + middle); break; } else if(a[middle] > destination1){ end = middle -1; } else { head = middle + 1; } } if(isFlag) { System.out.println("抱歉,数组中不存在该元素"); } } }