本文共 3272 字,大约阅读时间需要 10 分钟。
因为数组在栈中存储的时其在堆中的地址,则复制数组的时候应该重新定义一个数组并开辟新的内存去存储所复制的新的数组,如:
方法1:
public static int[] copy(int[] array){ int[] tmp = new int[array.length]; for (int i = 0; i < array.length; i++) { tmp[i] = array[i]; } return tmp;}public static void main(String[] args) { int[] array = { 1,2,3,4,5}; int[] ret = copy(array); System.out.println(array1); System.out.println(Arrays.toString(ret)); }
方法2:
int[] array1 = { 1,2,3,4,5,6};int[] array2 = Arrays.copyOf(array,array.length);System.out.println(Arrays.toString(array2));//以下为部分复制int[] array3 = Arrays.copyOfRange(array1,2,4);//2,4表示从第二项复制,第四项结束,同样的,左闭右开System.out.println(Arrays.toString(array3));//此时输出array1的第2项和第3项
方法3:
int[] array = { 1,2,3,4,5,6}int[] ret = array.clone();//此方法为Object的方法ret[0] = 111;System.out.println(Arrays.toString(array));System.out.println(Arrays.toString(ret));
方法4:
int[] array = { 1,2,3,4,5};int[] copy = new int[array.length];System.arraycopy(array,0,copy,0,array.length);System.out.println(Arrays.toString(copy));
深拷贝:拷贝完成后修改拷贝后的新数组的元素不影响原来数组的元素就叫深拷贝。
浅拷贝:修改元素数据后也会影响原数组元素的数据
二分法查找某个元素,前提为数组必须有序:
public static void main(String[] args) { int[] array = { 1,2,3,4,5,6,7,8,9,10}; int ret = binarySearch(array,9); System.out.println(ret);}public static int binarySearch(int[] array,int key) { int i,j,m; int count=0;//找了多少次 for (i = 0,j=array.length-1; i <= j;) { m=(i+j)/2; count++; if (array[m]==key){ return count;//若需要知道是第几个元素只需改为 return m; }else if (array[m]>key){ j=m-1; }else if (array[m]<key){ i=m+1; } } return -1;//若数组中没有要找的数据,则输出-1}
也可直接调用Arrays工具类:
Arrays.binarySerch(array,5);//这里的5为要查找的元素,此方法的返回值为数组的角标,即array[Arrays.binarySerch(array,5)] = 5;
冒泡排序:
public static void main(String[] args) { int[] array ={ 9,8,7,6,5,4,3,2,1}; System.out.println(Arrays.toString(aaa(array)));}public static int bbb (int i,int[]array){ //每一趟需要比array.length-i次 for(int j=0;j<array.length-i;j++){ if (array[j]<=array[j+1]){ continue; }else { int tmp = array[j]; array[j]=array[j+1]; array[j+1]=tmp; } }}public static int aaa(int[] array){ //需要排列i趟 for (int i=1;i<array.length;i++){ bbb(i,array); }}
冒泡排序的优化:
public static void main(String[] args) { int[] array ={ 9,8,7,6,5,4,3,2,1}; System.out.println(Arrays.toString(bubbleSort(array)));}public static void bubbleSort(int[] array){ for (int i=0;i<array.length-1;i++){ boolean falg = false;//默认每一趟不交换 for(int j=0;j<array.length-i-1;j++){ if (array[j] > array[j+1]){ int tmp = array[j]; array[j]=array[j+1]; array[j+1]=tmp; falg = ture;//交换过后修改falg的值 } } if falg = false{ break;//若此趟没有任何元素交换,则跳出 } }} }}
直接调用工具进行有序排列:
Arrays.sort(array);System.out.println(Arrays.toString(array));
public static void main(String[] args) { int[] array ={ 9,8,7,6,5,4,3,2,1}; System.out.println(max(array));}public static int[] max (int[] array){ int max = array[0]; for (int i=1;i<array.length;i++){ if(array[i]>max){ max = array[i]; } } return max;}
转载地址:http://hwbe.baihongyu.com/