日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java程序员必备技能:Collections工具类深度解析!

發布時間:2023/11/29 java 29 coder
生活随笔 收集整理的這篇文章主要介紹了 Java程序员必备技能:Collections工具类深度解析! 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在之前的文章中,我們學習了單列集合的兩大接口及其常用的實現類;在這些接口或實現類中,為我們提供了不少的實用的方法。
本篇文章我們來介紹一種java開發者為我們提供了一個工具類,讓我們更好的來使用集合

Collections 工具類

Collections 是一個操作Set,List,Map等的集合工具類
它提供了一系列靜態的方法對集合元素進行排序、查詢和修改等的操作,還提供了對集合對象設置不可變、對集合對象實現同步控制等方法。

常用功能
通過java的api文檔,可以看到Collections了很多方法,我們在此就挑選幾個常用的功能,為大家演示一下使用:

  • public static void shuffle(List<?> list) 打亂順序:打亂集合順序。
  • public static void sort(List list):根據元素的自然順序 對指定列表按升序進行排序
  • public static void sort(List list,Comparator<? super T> ): 根據指定比較器產生的順序對指定列表進行排序。

直接擼代碼:

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

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

public class Demo1Collections {

    public static void main(String[] args) {

        //創建一個List 集合
        List<Integer> numbers = new ArrayList<>();
        //在這里咱們順便使用下Collections的addAll()方法
        Collections.addAll(numbers, 3,34,345,66,22,1);

        System.out.println("原集合" + numbers);
        //使用排序算法
        Collections.sort(numbers);
        System.out.println("排序之后"+numbers);

        Collections.shuffle(numbers);
        System.out.println("亂序之后" + numbers);

        //創建一個字符串List 集合
        List<String> stringDemo = new ArrayList<>();
        stringDemo.add("nihao");
        stringDemo.add("hello");
        stringDemo.add("wolrd");
        stringDemo.add("all");
        System.out.println("原集合" + stringDemo);
        //使用排序算法
        Collections.sort(stringDemo);
        System.out.println("排序之后"+stringDemo);

        List<Person> people = new ArrayList<>();
        people.add(new Person("秋香", 15));
        people.add(new Person("石榴姐", 19));
        people.add(new Person("唐伯虎", 12));
        System.out.println("--" + people);
        
        //如果Person類中,這里報錯了,為什么呢? 在這里埋個伏筆,且看下文
        Collections.sort(people);
        
        System.out.println("----" + people);

    }
}

Comparable 和 Comparator

Comparable 接口實現集合排序

我們上面代碼最后一個例子,使用了我們自定義的類型,在使用排序時,給我們報錯了?這是為什么呢?整型包裝類和字符串類型,和我們的自定義類型有什么區別?

那我們通過API文檔,看看這個方法,可以看到 根據元素的自然順序 對指定列表按升序進行排序。列表中的所有元素都必須實現 Comparable 接口。此外,列表中的所有元素都必須是可相互比較的。 而Comparable 接口只有一個方法 int compareTo(T o)比較此對象與指定對象的順序。

編程學習,從云端源想開始,課程視頻、在線書籍、在線編程、一對一咨詢……你想要的全部學習資源這里都有,重點是統統免費!點這里即可查看

說的白話一些,就是我們使用自定義類型,進行集合排序的時候,需要實現這個Comparable接口,并且重寫 compareTo(T o)。

public class Person2 implements Comparable<Person2>{
    private String name;
    private int age;

    public Person2(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    @Override
    public int compareTo(Person2 o) {
        //重寫方法如何寫呢?
//        return 0; //默認元素都是相同的
        //自定義規則   我們通過person 的年齡進行比較  this 代表本身,而 o 代表傳參的person對象
        //這里的比較規則
        //  ==》  升序 自己 - 別人
        //  ==》  降序 別人 - 自己
//        return this.getAge() - o.getAge(); //升
        return o.getAge() - this.getAge(); //降

    }
}


public class Demo2Comparable {

    public static void main(String[] args) {
        List<Person2> people2 = new ArrayList<>();
        people2.add(new Person2("秋香", 15));
        people2.add(new Person2("石榴姐", 19));
        people2.add(new Person2("唐伯虎", 12));
        System.out.println("--" + people2);

        //這里報錯了,為什么呢?
        Collections.sort(people2);

        System.out.println("----" + people2);
    }
}

Comparator 實現排序

使用Comparable 接口實現排序,是一種比較死板的方式,我們每次都要讓自定義類去實現這個接口,那如果我們的自定義類只是偶爾才會去做排序,這種實現方式,不就很麻煩嗎!所以工具類還為我們提供了一種靈活的排序方式,當我需要做排序的時候,去選擇調用該方法實現

public static <T> void sort(List<T> list, Comparator<? super T> c)

根據指定比較器產生的順序對指定列表進行排序。我們通過案例來看看該方法的使用

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

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

public class Demo3Comparator {
    public static void main(String[] args) {

        List<Person> people = new ArrayList<>();
        people.add(new Person("秋香", 15));
        people.add(new Person("石榴姐", 19));
        people.add(new Person("唐伯虎", 12));
        System.out.println("--" + people);

        //第二個參數 采用匿名內部類的方式傳參 - 可以復習之前有關內部類的使用
        Collections.sort(people, new Comparator<Person>() {
            @Override
            public int compare(Person o1, Person o2) {
                //這里怎么用呢 自定義按年齡排序
//                return 0;
//                return o1.getAge() - o2.getAge(); //升序
                return o2.getAge() - o1.getAge(); //降序

                //結論: 前者 -后者  升序 反之,降序
                //這種方式 我們優先使用
            }
        });
        System.out.println("排序后----" + people);
    }
}

Comparable 和 Comparator

Comparable: 強行對實現它的每個類的對象進行整體排序。這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法。只能在類中實現compareTo()一次,不能經常修改類的代碼實現自己想要的排序。實現此接口的對象列表(和數組)可以通過Collections.sort(和Arrays.sort)進行自動排序,對象可以用作有序映射中的鍵或有序集合中的元素,無需指定比較器。

Comparator: 強行對某個對象進行整體排序。可以將Comparator 傳遞給sort方法(如Collections.sort或 Arrays.sort),從而允許在排序順序上實現精確控制。還可以使用Comparator來控制某些數據結構(如有序set或有序映射)的順序,或者為那些沒有自然順序的對象collection提供排序。

小結

Collections 是 Java 中用于操作集合的工具類,它提供了一系列靜態方法來對集合進行排序、查找、遍歷等操作。在 Java 中,Map 是一種特殊的集合,用于存儲鍵值對數據。雖然 Collections 類的部分方法可以直接操作 Map 的鍵或值的集合視圖,但并不能直接對整個 Map 進行操作。

Collections 類提供了一些靜態方法來對 Map 的鍵或值集合視圖進行操作,比如排序、查找最大值、查找最小值等。例如,Collections.sort 方法可以對 List 類型的集合進行排序,而 List 類型的 map.keySet() 和 map.values() 返回的集合都可以使用這個方法進行排序。同樣地,Collections.max 和 Collections.min 也可以用于獲取集合中的最大值和最小值。

另外,對于整個 Map 的操作,可以直接使用 Map 接口提供的方法進行操作,比如 put、get、remove 等。如果需要對整個 Map 進行操作,一般直接調用 Map 接口提供的方法會更加方便和直觀。

總之,Collections 類主要用于操作集合類(比如 List、Set),而對于 Map 類型的操作,一般直接使用 Map 接口提供的方法即可。

還是老生常談,熟能生巧!多練!happy ending!!

總結

以上是生活随笔為你收集整理的Java程序员必备技能:Collections工具类深度解析!的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。