任何一門編程語言,數組都是最重要和經常使用的數據結構之一,但不一樣的語言對數組的構造與處理是不盡相同的。java
Java中提供了java.util.Arrays 類能方便地操做數組,而且它提供的全部方法都是靜態的。下面介紹一下Arrays類最經常使用的幾個方法。編程
Arrays工具類提供了一個sort方法,只須要一行代碼便可完成排序功能。數組
Arrays提供了一個toString方法,能夠直接把一個數組轉換爲字符串,這樣能夠方便觀察數組裏的元素。數據結構
//來源:公衆號【時光與字節】 //數組排序與轉換爲字符串 package BaseCode; import java.util.Arrays; public class j4_1028_11 { public static void main(String[] args) { int[] ff= {11,3,25,71,9}; System.out.print("數組ff未排序: "); for(int n:ff) System.out.print(n+" "); Arrays.sort(ff); // 對數組進行排序 System.out.printf("\n數組ff排序後: "); for(int n:ff) System.out.print(n+" "); //將數組轉換爲字符串 System.out.printf("\n數組ff轉爲字符串: "+Arrays.toString(ff)); } }
運行結果編程語言
數組ff未排序:11 3 25 71 9 數組ff排序後:3 9 11 25 71 數組ff轉爲字符串:[3, 9, 11, 25, 71]
Arrays提供了fill方法對數組(或數組指定位置)填充或替換爲指定的值。工具
Arrays.equals能夠比較兩個數組中的元素是否同樣。spa
//來源:【時光與字節】 //fill方法和equals方法 package BaseCode; import java.util.Arrays; public class j4_1028_12 { public static void main(String[] args) { int[] ff= new int[5]; Arrays.fill(ff, 5); System.out.print("數組所有元素填充爲5: "); for(int n:ff) System.out.print(n+" "); //將數組從第1個元素至第3個元素填充爲7 //含第1個元素,不含第3個元素 Arrays.fill(ff,1,3,7); System.out.print("\n數組指定位置填充爲7: "); for(int n:ff) System.out.print(n+" "); int[] nn= new int[5]; Arrays.fill(nn, 5); System.out.printf("\nff與nn相同:"+Arrays.equals(ff, nn)); } }
運行結果code
數組所有元素填充爲5:5 5 5 5 5 數組指定位置填充爲7:5 7 7 5 5 ff與nn相同:false
Arrays類的copyOf()方法和copyRange()方法能夠實現對數組的複製。orm
copyOf(arr, int newlength)blog
參數newlength爲新數組的長度,即從數組arr的第0個位置開始,直到newlength結束,若是newlength大於arr的長度,後面按默認值填充。
copyOfRange(arr, int formIndex, int toIndex)
參數formIndex爲從數組arr中取元素的開始位置,toIndex爲結束位置,但不包括該位置的元素,如toIndex超出arr的長度,後面按默認值填充。
//來源:公衆號【時光與字節】 //數組的複製,copyOf與copyOfRange的使用 package BaseCode; import java.util.Arrays; public class j4_1028_10 { public static void main(String[] args) { int[] ff= {1,3,5,7,9}; //Arrays.copyOf複製數組至指定長度,從0開始 int[] newff1=Arrays.copyOf(ff, 3); int[] newff2=Arrays.copyOf(ff, 6); System.out.print("copyOf的使用:\n數組newff1: "); for(int n:newff1) System.out.print(n+" "); System.out.printf("\n數組newff2: "); for(int n:newff2) System.out.print(n+" "); //Arrays.copyOfRange第二個參數爲開始位置 //第三個參數爲結束位置 int[] newff3=Arrays.copyOfRange(ff, 1, 4); int[] newff4=Arrays.copyOfRange(ff, 1, 7); System.out.printf("\ncopyOfRange的使用:\n數組newff3: "); for(int n:newff3) System.out.print(n+" "); System.out.printf("\n數組newff4: "); for(int n:newff4) System.out.print(n+" "); } }
運行結果
copyOf的使用: 數組newff1:1 3 5 數組newff2:1 3 5 7 9 0 copyOfRange的使用: 數組newff3:3 5 7 數組newff4:3 5 7 9 0 0
Arrays類的binarySearch 方法能夠查詢元素出現的位置,返回元素的索引。可是注意,使用binarySearch進行查找以前,必須使用sort進行排序。而且若是數組中有多個相同的元素,查找結果是不肯定的。
binarySearch(arr, object key)
若是key在數組中,則返回搜索值的索引;不然返回-1或者負的插入點值。
所謂插入點值就是第一個比key大的元素在數組中的索引,並且這個索引是從1開始的。
binarySearch(arr, int fromIndex, int endIndex, object key);
fromIndex:指定範圍的開始處索引(包含)
toIndex:指定範圍的結束處索引(不包含)
其搜索結果可分爲如下四種狀況:
該搜索鍵不在範圍內,且大於範圍(數組)內元素,返回 –(toIndex + 1);
該搜索鍵不在範圍內,且小於範圍(數組)內元素,返回–(fromIndex + 1);
該搜索鍵在範圍內,但不是數組元素,由1開始計數,返回負的插入點索引值;
該搜索鍵在範圍內,且是數組元素,由0開始計數,返回搜索值的索引值;
可參看下面的示例代碼及註釋
//來源:公衆號【時光與字節】 //查找數組元素:binarySearch 方法的使用 package BaseCode; import java.util.Arrays; public class j4_1028_13 { public static void main(String[] args) { int[] fn= {1,3,5,7,9}; Arrays.sort(fn);//查找前先排序 int cx1=Arrays.binarySearch(fn,5);//返回2 ,找到了關鍵字,索引從0開始 //未找到6,返回的是負的插入點值, //6在數組中的插入點是元素7的索引, //元素7的索引從1開始算就是4,全部返回-4 int cx2=Arrays.binarySearch(fn,6);//未找到,返回-4,插入點7的索引是4 int cx3=Arrays.binarySearch(fn,4);//未找到,返回-3,插入點5的索引是3 System.out.println("不指定查找範圍示例:"); System.out.println("數組fn的內容:"+Arrays.toString(fn)); System.out.printf("[5]找到:cx1=%d%n", cx1); System.out.printf("[6][4]未找到:cx2=%d, cx3=%d%n", cx2,cx3); //在數組的指定位置查找元素,參數範圍(1,3)包含的數組元素爲[3,5] //該搜索鍵不在範圍內,且大於範圍(數組)內元素,返回 –(toIndex + 1)。 int cx4=Arrays.binarySearch(fn,1,3,10); //該搜索鍵不在範圍內,且小於範圍(數組)內元素,返回–(fromIndex + 1); int cx5=Arrays.binarySearch(fn,1,3,-3); //該搜索鍵在範圍內,但不是數組元素,由1開始計數,返回負的插入點索引值 int cx6=Arrays.binarySearch(fn,1,3,4); //該搜索鍵在範圍內,且是數組元素,由0開始計數,返回搜索值的索引值 int cx7=Arrays.binarySearch(fn,1,3,5); System.out.println("-------------------------"); System.out.println("用參數指定查找範圍示例:"); System.out.println("第一種狀況:cx4= "+cx4); System.out.println("第二種狀況:cx5= "+cx5); System.out.println("第三種狀況:cx6= "+cx6); System.out.println("第四種狀況:cx7= "+cx7); } }
運行結果
不指定查找範圍示例: 數組fn的內容:[1, 3, 5, 7, 9] [5]找到:cx1=2 [6][4]未找到:cx2=-4, cx3=-3 ------------------------- 用參數指定查找範圍示例: 第一種狀況:cx4= -4 第二種狀況:cx5= -2 第三種狀況:cx6= -3 第四種狀況:cx7= 2