首先先創建一個打印數組的方法,方便后面直接使用
public static void output(int []a) { for(int i=0;i<a.length;i++) { System.out.printf(a[i]+" "); } System.out.println(); }
1、填充數組:fill
eg1.
int []arr = new int[5]; Arrays.fill(arr, 2); output(arr);
結果是:2 2 2 2 2
分析:給所有值賦值2
eg2.
int []arr = new int[5]; Arrays.fill(arr, 1,3,8); output(arr);
結果是:0 8 8 0 0
分析:給第1位(0開始)到第3位(不包括)賦值8
2、數組元素排序:sort
eg1.
int []arr = {3,2,1,5,4}; Arrays.sort(arr); output(arr);
結果是:1 2 3 4 5
分析:給所有數按升序排序
eg2.
int []arr = {3,2,1,5,4}; Arrays.sort(arr,1,3); output(arr);
結果是:3 1 2 5 4
分析:給第1位(0開始)到第3位(不包括)排序
3、比較數組元素是否相等:equals
int []arr1 = {1,2,3}; int []arr2 = {1,2,3}; System.out.println(Arrays.equals(arr1,arr2));
結果是:true
分析:如果是arr1.equals(arr2),則返回false,因為equals比較的是兩個對象的地址,不是里面的數,而Arrays.equals重寫了equals,所以,這里能比較元素是否相等。
這里補充一下,如果還是不用Arrays.equals,那么我們應該如何重寫equals來比較兩個數組的元素是否相等呢?這里提供一段代碼
//Compare the contents of two int arrays public static boolean isEquals(int[] a, int[] b) { if( a == null || b == null ) { return false; } if(a.length != b.length) { return false; } for(int i = 0; i < a.length; ++i ) { if(a[i] != b[i]) { return false; } } return true; }
4、二分查找法找指定元素的索引值(下標):binarySearch
數組一定是排好序的,否則會出錯。找到元素,只會返回最后一個位置
eg1:
int []arr = {10,20,30,40,50}; System.out.println(Arrays.binarySearch(arr, 20));
結果是:1
分析:能找到該元素,返回下標為1(0開始)
eg2:
int []arr = {10,20,30,40,50}; System.out.println(Arrays.binarySearch(arr, 35));
結果是:-4
分析:找不到元素,返回-x,從-1開始數,如題,返回-4
eg3:
int []arr = {10,20,30,40,50}; System.out.println(Arrays.binarySearch(arr, 0,3,30));
結果是:2
分析:從0到3位(不包括)找30,找到了,在第2位,返回2
eg4:
int []arr = {10,20,30,40,50}; System.out.println(Arrays.binarySearch(arr, 0,3,40));
結果是:-4
分析:從0到3位(不包括)找40,找不到,從-1開始數,返回-4
5、截取數組:copeOf和copeOfRange
eg1: copy
int []arr = {10,20,30,40,50}; int []arr1 = Arrays.copyOf(arr, 3); output(arr1);
結果:10 20 30
分析:截取arr數組的3個元素賦值給姓數組arr1
eg2: copyOfRange
int []arr = {10,20,30,40,50}; int []arr1 = Arrays.copyOfRange(arr,1,3); output(arr1);
結果:20 30
分析:從第1位(0開始)截取到第3位(不包括)
6、其他
還有hashCode,toString,clone等這里就不介紹了,暫時用的少