Collections用法總結

Collections是一個包裝類,其中包含有各種有關集合操作的靜態多態方,比如可以作用在List和Set上,此類不能實例化。

排序

Integer[] array = new Integer[]{3, 10, 4, 0, 2};
List<Integer> integers = Arrays.asList(array);
Collections.sort(integers);
out.println(integers); //[0, 2, 3, 4, 10]

在這裏借用了Arrays的asList方法,該方法可以將數組轉成一個List。這裏也只能對封裝類型Integer數組調用asList方法,如果是int型的數組調用asList會出現其他問題。可以查考Arrays用法總結

混排

out.println(integers); //[0, 2, 3, 4, 10]
Collections.shuffle(integers);
out.println(integers); //[0, 3, 10, 2, 4]

反轉

out.println(integers); //[0, 3, 10, 2, 4]
Collections.reverse(integers);
out.println(integers); //[3, 0, 4, 2, 10]

填充(覆蓋)元素

array = new Integer[]{3, 10, 4, 0, 2};
integers = Arrays.asList(array);
Collections.fill(integers, -1);
out.println(integers); //[-1, -1, -1, -1, -1]
out.println(Arrays.toString(array)); //[-1, -1, -1, -1, -1]

通過輸出可以發現原數組的值也跟着發生了變化,因爲是封裝類型,所以Integer[]中和List<Integer>中的元素指向的是用一個Integer對象的地址,所以兩個會一起變化。

替換元素

array = new Integer[]{3, 10, 4, 4, 4};
integers = Arrays.asList(array);
Collections.replaceAll(integers, 4, -4);
out.println(integers); //[3, 10, -4, -4, -4]

拷貝List

out.println(integers); //[3, 10, -4, -4, -4]
List<Integer> integersCopy = new ArrayList<>();  integersCopy.add(1);
integersCopy.add(1);
integersCopy.add(1);
integersCopy.add(1);
integersCopy.add(1);
integersCopy.add(1); 
//如果不對List調用add方法,integerCopy還是空的,下面的copy方法會出錯
Collections.copy(integersCopy, integers);
out.println(integersCopy); //[3, 10, -4, -4, -4, 1]

返回List中的最大值,最小值

array = new Integer[]{3, 10, 4, 0, 2};
integers = Arrays.asList(array);
out.println(integers);
out.println(Collections.min(integers)); //0
out.println(Collections.max(integers)); //10

源列表中第一次和最後一次出現指定列表的起始位置

Integer[] array1 = new Integer[]{3, 10, 4, 0, 2, 4, 0};
List integers1 = Arrays.asList(array1);
Integer[] array2 = new Integer[]{4, 0};
List integers2 = Arrays.asList(array2);
out.println(Collections.lastIndexOfSubList(integers1, integers2)); //5
out.println(Collections.indexOfSubList(integers1, integers2)); //2

循環移動

out.println(integers); [3, 10, 4, 0, 2]
Collections.rotate(integers, 1); //[2, 3, 10, 4, 0] 依次右移一位
out.println(integers);
Collections.rotate(integers, -2); //[10, 4, 0, 2, 3] 依次左移兩位
out.println(integers);

二分查找,返回所在的下標。沒有找到返回負的下標值。

array = new Integer[]{0, 2, 4, 10, 20};
integers = Arrays.asList(array);
out.println(Collections.binarySearch(integers, 4)); //2
out.println(Collections.binarySearch(integers, 9)); //-4

指定元素在集合中出現的次數

array = new Integer[]{0, 2, 4, 4, 20};
integers = Arrays.asList(array);
out.println(Collections.frequency(integers, 4)); //2

得到對象的n份拷貝

List<Integer> numbers = new ArrayList<>();
numbers.add(1);
List<List<Integer>> lists = Collections.nCopies(3, numbers);
out.println(lists); //[[1], [1], [1]]
numbers.add(2);
out.println(lists); //[[1, 2], [1, 2], [1, 2]]

Collections.nCopies(n, object)返回一個List對象,該List對象中含有對象object的n份拷貝,然而實際上列表中並沒有存儲n份拷貝,從中任意取出一個時,得到的是同一個object。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章