学习了数组的创建于赋值,来看看数组的基本操作。
数组的复制,有两种方法:
1.java.lang.System arraycopy();
int[] arr1 = new int[]{1,2,3};
int[] arr2 = new int[3];
System.arraycopy(arr1, 0, arr2, 0,3);
//输出 1 2 3
for(int i : arr2){
System.out.println(i);
}
2.java.util.Arrays copyOf();
int[] arr1 = new int[]{1,2,3};
int[] arr2 = Arrays.copyOf(arr1, 3);
//输出1 2 3
for(int i : arr2){
System.out.println(i);
}
上面两段代码演示了如何用两种方法如何复制一个数组,复制数组可以用于数组的“扩容”,这里说的扩容只是形式上的,其实数组的长度是不能改变的,只不过是新建了一个数组而已。
public static int[] copyOf(int[] original, int newLength) {
int[] copy = new int[newLength];
System.arraycopy(original, 0, copy, 0,
Math.min(original.length, newLength));
return copy;
}
上面是粘的CopyOf的源码,可以看出,copyOf()的底层也是调用的arraycopy实现的。
数组的排序:
java.util.Arrays sort()
int[] arr1 = new int[]{1,5,8,9,4,3,6};
Arrays.sort(arr1);
for(int i : arr1){
System.out.println(i);
}
可以使用Arrays里的sort()方法进行排序,这里默认是升序的,当然里面可以指定比较器,用以控制排序规则,这里先不用了解,或者也可以自己写比较方法,用来控制比较排序,sort方法使用的是快速排序法,排序的方法有很多,这里我们作为初级入门的话也许理解不了,对于一些知识点的刨析,我会更新到博客,有兴趣的话 可以看看,下面我们以二分法排序来对数组进行排序:
冒泡排序的原理就是用一个数与相邻元素依次比较,大就交换位置,依次比较完以后,大数就都飘上去了,类似于吹泡泡一样,越往上升泡泡越大,例如 1 5 8 9 4 3 6,先用1与5比较,遇到比较大的就交换位置,比较过程如下:
1 5 8 9 4 3 6 1与5比较
5 1 8 9 4 3 6 1与8比较
5 8 1 9 4 3 6 1与9比较
5 8 9 1 4 3 6 1与4比较
5 8 9 4 1 3 6 1与3比较
5 8 9 4 3 1 6 1与6比较
5 8 9 4 3 6 1
第一轮结束,最小的数到了最后,注意,第二轮最后一个数就不用比了,肯定最小
int[] arr = new int[]{1,5,8,9,4,3,6};
for(int i=0; i<arr.length-1;i++){//捆支比较轮数
for(int j=0; j<arr.length-1-i; j++){//控制比较次数
//如果该数小于后一个数,替换
if(arr[j]<arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
数组的查找:
可以自己循环遍历查找,在java.util.Arrays 里面也有 binarySearch 方法,使用二分法来查找值,但是使用binarySearch前一定要将数组排序,不然会出现错误结果,
int[] arr = new int[]{1,5,8,9,4,3,6};
Arrays.sort(arr);
int index = Arrays.binarySearch(arr, 1);
binarySearch查找到以后,返回的是下标,没有这个值,返回的是 -(插入点) - 1,例如1 2 4中查找3,没有返回的是-3,因为3如果插入到1 2 4 中,应该是1 2 3 4,坐标为2,而 -2-1=-3。
数组是Java基础部分比较重要的概念,学习好数组,对于以后集合的学习有很大的帮助意义,因为集合的底层都直接或者间接的使用到了数组的相关操作。因为数组的内容太多,篇幅有限,这里只能列出一些最为基础的,在学习中还是要多去钻研。