1. 程式人生 > >java中Arrays類的一些用法

java中Arrays類的一些用法

列舉Arrays的一些用法,方便以後查詢使用。

//1.sort排序String[]陣列:升序:從小到大
String[] names = { "Liz", "John", "Eric", "Alan" };
//只排序前兩個
//[John, Liz, Eric, Alan]
Arrays.sort(names, 0, 2);
//全部排序
//[Alan, Eric, John, Liz]
Arrays.sort(names);
String [] name = {"li","ad","sf","qw"};
Arrays.sort(name);

//2.使用該方法可以返回一個固定大小的List,如:
List<String> str= Arrays.asList("welcome"
,"to","fsdg"); List<Integer> intList = Arrays.asList(1, 2, 3, 4); int[]a={1,2,3,4}; //3.toString()方法:方便我們打印出陣列的內容。int[] ,String[],long[],boolean[]... System.out.println(Arrays.toString(name)); System.out.println(Arrays.toString(a)); //4.deepToString:方法:列印二維陣列,任何型別; int[][] twoD={{1,2,3,4},{3,6,7
,8}}; System.out.println(Arrays.deepToString(twoD)); //5.equals:方法:使用Arrays.equals().來比較1維陣列是否相等。 String[] names1 = { "Eric", "John", "Alan", "Liz" }; String[] names2 = { "Eric", "John", "Alan", "Liz" }; System.out.println(Arrays.equals(names1,names2)); //6.Arrays.deepEquals能夠去判斷更加複雜的陣列是否相等。 int[][] stuGrades1 = { { 80
, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } }; int[][] stuGrades2 = { { 80, 81, 82 }, { 84, 85, 86 }, { 87, 88, 89 } }; System.out.println(Arrays.deepEquals(stuGrades1, stuGrades2)); //7.fill()方法,用某個陣列填充陣列。 int[] array1 = new int[8]; Arrays.fill(array1, 1); //[1, 1, 1, 1, 1, 1, 1, 1] System.out.println(Arrays.toString(array1)); Arrays.fill(array1, 3); System.out.println(Arrays.toString(array1)); //8. binarySearch方法 :折半查詢法 ,返回所給元素的索引 //- 用法: //- //fromIndex,toIndex這兩個引數可以省略(表示整個陣列) //不省略表示在這個區間查詢,左閉右開, key 表示要查詢的元素 //返回要查詢元素的 索引位置 int index = Arrays.binarySearch(new int[] { 1, 2, 3, 4, 5, 6, 7 }, 6); public static int binarySearch(byte[] a, int fromIndex, int toIndex, byte key) //9. copyOf及copyOfRange方法 :將一個數組拷貝到另一個數組中/或者其中//的一部分 //- 用法: //索引都是從零開始 String[] names2 = { "Eric", "John", "Alan", "Liz" }; //[Eric, John, Alan] String[] copy = Arrays.copyOf(names2, 3); //[Alan, Liz] ,左閉右開 String[] rangeCopy = Arrays.copyOfRange(names2, 2, names2.length);

補充Arrays.asList()方法:

Arrays提供了asList()方法,可以很方便地得到一個List

List<Integer> integers = Arrays.asList(1, 2, 3, 4);

在日常操作中,我們通常都會使用add和remove方法對List的元素進行管理。如

integers.add(5);
integers.remove(1)

這時就出現了異常:java.lang.UnsupportedOperationException
原因:Arrays.asList()返回了一個定長的list, 這個方法充當array系列API和collection系列API之間的橋樑。所以說,返回值,只是陣列簡單包裝而成的List而已,並不能改變其長度。

不過沒有關係,我們可以用ArrayList的構造方法,來建立一個新的ArrayList,然後再進行增刪操作。

Integer[] ints = {1, 2, 3, 4};
ArrayList<Integer> integers = new ArrayList<>(Arrays.asList(ints));
integers.add(5);
假ArrayList:  java.util.Arrays$ArrayList
真ArrayList:  java.util.ArrayList

Arrays.asList

Arrays.asList(T… a)中返回的ArrayList是Arrays的內部類,繼承了AbstractList。所以說呼叫add方法的時候,其實呼叫了父類AbstractList的方法,方法原始碼如下:(假ArrayList)

public void add(int index, E element) {
    throw new UnsupportedOperationException(); //直接丟擲了異常。
}

真ArrayList
我們通常用的ArrayList,繼承了AbstractList,並重寫了add, remove等方法,

public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

public E remove(int index) {
      rangeCheck(index)
      modCount++;
      E oldValue = elementData(index)
      int numMoved = size - index - 1;
      if (numMoved > 0)
          System.arraycopy(elementData, index+1, elementData, index,
                           numMoved);
      elementData[--size] = null; // clear to let GC do its wor
      return oldValue;
    }