1. 程式人生 > >操作集合的工具類Collection

操作集合的工具類Collection

概述

該工具類中提供了大量的方法對集合進行排序、查詢和修改等,還提供了將集合物件設定為不可變、對集合物件實現同步控制等方法。

排序操作

  • void reverse(List list):反轉指定List集合中的元素順序;
  • void shuffle(List list):打亂集合元素原有的順序;
  • void sort(List list):根據元素的自然順序對集合進行升序排序;
  • void sort(List list,Comparator c):根據Comparator產生的順序對List集合元素進行排序;
  • void swap(List list,int i,int j)
    :將指定集合中i處元素和j元素進行交換;
  • void rotate(List list,int distabce):當distabce為正數時,將distabce之後的元素移到集合前面,當為負數時,將distabce之前的元素移到集合後面。
        ArrayList array = new ArrayList();

        array.add(2);
        array.add(5);
        array.add(-3);
        array.add(10);
        array.add(-6);
        System.out.println(array);//[2, 5, -3, 10, -6]

        //反轉
        Collections.reverse(array);
        System.out.println(array);//[-6, 10, -3, 5, 2]

        //按自然順序排序
        Collections.sort(array);
        System.out.println(array);//[-6, -3, 2, 5, 10]

        //隨機排序
        Collections.shuffle(array);
        System.out.println(array);//[5, -3, -6, 10, 2]

查詢與替換

package org.westos.Mydemo;

import sun.plugin.javascript.navig.Link;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SearchAndInset {
    public static void main(String[] args) {
        ArrayList<Integer> nums = new ArrayList<>();

        nums.add(2);
        nums.add(-13);
        nums.add(2);
        nums.add(-4);
        nums.add(7);
        nums.add(4);
        nums.add(3);
        nums.add(2);

        //使用二分搜尋法搜尋指定的List集合元素,前提條件是集合處於有序狀態
//        Collections.sort(nums);
//        System.out.println(nums);//[-13, -4, 2, 2, 2, 3, 4, 7]
//        System.out.println(Collections.binarySearch(nums,3));//5

        //返回給定集合中的最大值和最小值
        System.out.println(Collections.max(nums));//7
        System.out.println(Collections.min(nums));//13

        //Object max(Collection coll,Comparator comp)根據Comparator指定的順序獲取最大值
        //Object min(Collection coll,Comparator comp)根據Comparator指定的順序獲取最小值

        //使用指定元素替換指定List集合中的所有元素
//        Collections.fill(nums,000);
//        System.out.println(nums);//[0, 0, 0, 0, 0, 0, 0, 0]

        //返回指定集合中指定元素出現的次數
        System.out.println(Collections.frequency(nums,2));//3

        //返回子list在父list中第一次出現的位置索引,如果沒有出現則返回-1
//        System.out.println(nums);[2, -13, 2, -4, 7, 4, 3, 2]
        List<Integer> list = nums.subList(3, 5);
        System.out.println(Collections.indexOfSubList(nums,list));//3
        //返回子list在父list中最後一次出現的位置索引,如果沒有出現則返回-1
        List<Integer> list1 = nums.subList(2,3);
        System.out.println(Collections.lastIndexOfSubList(nums,list1));//7

        //使用一個新的newVal替換List物件的所有舊值
        Collections.replaceAll(nums,2,11);
        System.out.println(nums);//[11, -13, 11, -4, 7, 4, 3, 11]

    }
}

設定不可變集合
Collections提供瞭如下三個類方法來返回一個不可變集合:

  • emptyXxx():返回一個空的、不可變的集合物件,此處的集合可以是List、也可以是SortedSet、Set還可以是Map、hashMap;
  • singletonXxx()返回一個只包含指定物件的、不可變的集合物件。
  • unmodifibleXxx():返回指定集合物件的不可變檢視。
        List list = Collections.emptyList();

        Set set = Collections.singleton("java");

        HashMap scores = new HashMap<>();
        scores.put("chinese",80);
        scores.put("English",500);

        Map map = Collections.unmodifiableMap(scores);

        //試圖向不可變集合中新增元素
        list.add("test1");
        set.add("test2");
        map.put("test3",30);
        //執行之後引發UnsupportedOperationException異常