Java中的Arrays類使用詳解
阿新 • • 發佈:2019-01-22
首先先建立一個列印陣列的方法,方便後面直接使用
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等這裡就不介紹了,暫時用的少