Java集合中Collections工具類總結


Collections工具類

Collections 是一個操作 Collection(Set、 List )和 Map 等集合的工具類

Collection和Collections的區別?

Collection是用來存儲單列數據的集合接口,常用子接口有List和Set

Collections是操作Collection的工具類。

常用方法

排序操作:

  • reverse(List): 反轉 List 中元素的順序
  • shuffle(List): 對 List 集合元素進行隨機排序
  • sort(List): 根據元素的自然順序對指定 List 集合元素按升序排序
  • sort(List, Comparator): 根據指定的 Comparator 產生的順序對 List 集合元素進行排序
  • swap(List, int, int): 將指定 list 集合中的 i 處元素和 j 處元素進行交換

查找和替換:

  • Object max(Collection): 根據元素的自然順序,返回給定集合中的最大元素
  • Object max(Collection, Comparator): 根據 Comparator 指定的順序,返回給定集合中的最大元素
  • Object min(Collection)
  • Object min(Collection, Comparator)
  • int frequency(Collection, Object): 返回指定集合中指定元素的出現次數
  • void copy(List dest,List src):將src中的內容復制到dest中
  • boolean replaceAll(List list, Object oldVal, Object newVal): 使用新值替換List 對象的所有舊值

舉例:

reverse反轉方法

@Test
public void test3() {
    // 測試reverse方法
    List list = new ArrayList();

    list.add(2121);
    list.add(-1);
    list.add(21);
    list.add(0);
    list.add(45);

    //反轉
    Collections.reverse(list);
    System.out.println(list);//[45, 0, 21, -1, 2121]
}

sort方法

@Test
public void test2() {
    // 測試sort方法
    List list = new ArrayList();

    list.add(2121);
    list.add(-1);
    list.add(21);
    list.add(0);
    list.add(45);

    //按升序排序
    Collections.sort(list);
    System.out.println(list);//[-1, 0, 21, 45, 2121]
}

逆序排序

int compareTo(T t)方法說明

定義:比較此對象與指定對象的順序

返回:負整數、零或正整數。如果該對象小於、等於或大於指定對象,則分別返回負整數、零或正整數。

@Test
public void test1() {
    // 測試sort方法
    List list = new ArrayList();

    list.add(2121);
    list.add(-1);
    list.add(21);
    list.add(0);
    list.add(45);
    // 降序
    Collections.sort(list, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            System.out.println(o2 - o1);
            return o2 - o1; // 此時o2-o1是大於0的
        }
    });
    System.out.println(list);//[-1, 0, 21, 45, 2121]
}

對自定義對象的排序

方法一:通過實現Comprable的compareTo方法進行排序

// 實現Comparable接口
class User implements Comparable<User> {

    private String name;

    private Integer age;

    public User(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    @Override
    public int compareTo(User o) {

        //首先比較年齡,如果年齡相同,則比較名字
        int flag = this.getAge().compareTo(o.getAge());
        if (flag == 0) {
            return this.getName().compareTo(o.getName());
        } else {
            return flag;
        }
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

測試方法

// 自定義對象的排序,比如對User對象按照年齡排序,再按照name排序
@Test
public void testSort() {
    User f1 = new User("tony", 19);
    User f2 = new User("jack", 16);
    User f3 = new User("tom", 80);
    User f4 = new User("jbson", 44);
    User f5 = new User("jason", 44);
    User f6 = new User("tom", 12);

    List<User> list = new ArrayList<User>();
    list.add(f1);
    list.add(f3);
    list.add(f4);
    list.add(f2);
    list.add(f5);
    list.add(f6);
    Collections.sort(list);

    for (User o : list) {
        System.out.println(o.getAge() + "-->" + o.getName());
    }
}

輸出:

12-->tom
16-->jack
19-->tony
44-->jason
44-->jbson
80-->tom

copy方法

List dest = Arrays.asList(new Object[list.size()]);

@Test
public void testCopy(){
    List list = new ArrayList();

    list.add(2121);
    list.add(-1);
    list.add(21);
    list.add(0);
    list.add(45);

    //錯誤寫法:此時dest集合為長度為0,報錯IndexOutOfBoundsException: Source does not fit in dest
//        List dest = new ArrayList();
//        Collections.copy(dest,list);
//        System.out.println(dest.size());
//        System.out.println(dest);
    // 正確寫法:先造一個值為null,長度為list長度的集合。再拷貝
    List dest = Arrays.asList(new Object[list.size()]);
    System.out.println(dest.size()); // 5
    Collections.copy(dest,list);
    System.out.println(dest);
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM