今日份鼓励:如果你想中一颗树,那么它最好的栽种时间,一个是十年前,一个是现在!!
在这里因为博主的知识能力有限,我将会使用自己能够使用并且解释清楚的方法来完成这篇博客
目录
一、数组的拷贝
①创建一个新的数组,将拷贝数组,按照下标一一赋值给新的数组
分析:
1.arr.length是数组长度
2.Arrays.toString()是打印数组,打印的是字符串
②利用引用,将一个数组指向需要复制的数组对象
分析:
1.可以说这个并没有发生拷贝,它只是将一个数组对象被另一个数组引用指向
2.打印它们的数组名,是一致的更加说明我们的结论
3.数组对象依旧只有一个
③利用Arrays.copyOf()方法
定义:public static int[] copyOf(int[] original, int newLength)
分析:
1.它有俩个参数,第一个参数是我们要拷贝的数组第二个参数是我们要拷贝的新数组长度
2.大于源数组长度:结果是将打印0,因为未对JAVA中的变量初始化,那么编译器将JAVA中的变量初始化为该类型的零值,也可以说是对数组经行了扩容
④数组名.copy方法拷贝
⑤Sytem.arraycopy()方法拷贝
分析:
方法定义:public static native void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);
第一个参数是我们的源头数组
第二个参数是我们开始打印的数组下标
第三个参数是我们要拷贝的目标数组
第四个参数是从目标数组的哪一位下标开始
第五个参数是打印的长度
⑥使用Arrays.copyOfRange()方法
分析;它有三个参数
第一个参数是源头的数组
第二个参数拷贝数组的开始
第三个参数拷贝数组的结束
注意它是前闭后开区间
二、数组的遍历
遍历数组三种方法:
①使用下标直接访问 直接打印:
分析;
1.arr.length是数组长度
②使用foreach语句
分析:
1.是我们打印数组元素的类型
2.是我们打印的数组
3.打印数组元素
③使用Arrays.toString()方法
分析:
1.它是将数组转化为字符串
2.它是JAVA中自带的方法,它设置的方法重载可以对任意类型数组使用
这在我的上一篇博客中已经提及了三种方法以及它们的使用注意
三、数组的排序
②冒泡排序
冒泡排序的思想;就像水里的金鱼吐泡泡一样,一个一个的比较,最后冒出水面,然后比较的数字就少了一个
我们可以的二次优化
(1)每一趟的查找都会减少一个数字的比较,所以我们在内循环中可以递减循环次数
(2)我们发现如果经过一次排序后数组可能会出现有序的可能,所有每一趟的排序都可以检擦,如果没发生交换,说明数组已经有序
public class Main {
public static void bubbSort(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
boolean flag = false;
for (int j = 0; j < arr.length-i-1; j++) {
if(arr[j] > arr[j+1]){
int ret = arr[j];
arr[j] = arr[j+1];
arr[j+1] = ret;
flag = true;
}
}
if(flag = false){
break;
}
}
}
public static void main(String[] args) {
int[] arr = {2,7,6,4,9,3,1,0,10};
bubbSort(arr);
System.out.println(Arrays.toString(arr));
}
③Arrays.sort()排序方法
public static void main(String[] args) {
int[] arr = {2,7,6,4,9,3,1,0,10};
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
}
四、数组的查找
①顺序查找
分析:
1.输入的参数一个是带查找数组,一个是带查找数字
2如果找到该数字会返回数字的下标,查找不到会返回-1
public static int search(int[] arr,int key){
for (int i = 0; i < arr.length; i++) {
if (arr[i] == key){
return i;
}
}
return -1;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int key = scanner.nextInt();
int ret = search(arr,key);
System.out.println(ret);
}
②二分查找
分析;
1.二分查找的数组必须是有序的
2.二分的思想:就是每次查找都将查找范围缩小一半,它将于中间数比较,它如果大于中间数则在右边的区间否则就在左边区间
public class Main {
public static int binarySearch(int[] arr,int key){
int left = 0;
int right = arr.length - 1;
while(left <= right){
int mid = (right + left)/2;
if(arr[mid] > key){
right = mid - 1;
}else if(arr[mid] == key){
return mid;
}else{
left = mid + 1;
}
}
return -1;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = {1,2,3,4,5,6,7,8,9,10};
int key = scanner.nextInt();
int ret = binarySearch(arr,key);
System.out.println(ret);
}
五、二维数组
(1)二维数组的定义,它是一个特殊的一维数组
public static void main(String[] args) {
int[][] arr1 = {{1,2,3},{4,5,6}};//需要我们手动分割行
int[][] arr2 = new int[][]{{1,2,3},{4,5,6}};//不能加行与例
int[][] arr3 =new int[2][3]; //行与列都不能少
}
(2)二维数组的特点
1.它可以是不规则的
2.