java中Arrays類的一些用法
阿新 • • 發佈:2019-02-19
列舉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;
}