最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中Comparable和Comparator兩種比較器的區(qū)別詳解

 更新時間:2023年09月19日 09:48:15   作者:強欽欽  
這篇文章主要介紹了Java中Comparable和Comparator兩種比較器的區(qū)別詳解,Comparable接口將比較代碼嵌入自身類中,像Integer、String等這些基本類型的JAVA封裝類都已經(jīng)實現(xiàn)了Comparable接口,這些類對象本身就支持和自己比較,需要的朋友可以參考下

Comparable接口

  • 內比較器 ,位于包java.util
  • 自然排序(natural ordering)。compareTo方法也被稱為自然比較方法。
  • Comparable接口將比較代碼嵌入自身類中。像Integer、String等這些基本類型的JAVA封裝類都已經(jīng)實現(xiàn)了Comparable接口,這些類對象本身就支持和自己比較,直接調用Collections.sort()就可以對集合中元素的排序,無需自己去實現(xiàn)Comparable接口。

Comparator接口

  • 外比較器,位于包java.lang
  • Comparator也叫臨時規(guī)則排序,也稱作專門規(guī)則排序
  • 在一個獨立的類中專門實現(xiàn)比較。
  • 場景:
    • 一個對象不支持自己和自己比較(沒有實現(xiàn)Comparable接口),但是又想對兩個對象進行比較
    • 一個對象實現(xiàn)了Comparable接口,但是不能滿足要求時(比如升序 降序)

區(qū)別

在這里插入圖片描述

實現(xiàn)Comparable接口的方式比實現(xiàn)Comparator接口的耦合性一些。因為如果要修改比較算法,則需要修改Comparable接口的實現(xiàn)類,而實現(xiàn)Comparator的類是在外部進行比較的,不需要對實現(xiàn)類有任何修改。

代碼

package collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
/*
* TreeSet
* set接口的實現(xiàn);
* 基于哈希表和紅黑樹 ,而哈希表用來保證元素的唯一性、 紅黑樹保證元素的有序。有序可以是:
* 	1)自然順序
* 	2)比較器接口所定義的順序
*/
class Student2{
    private String name;
    private int age;
    public Student2(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public int getAge() {
        return age;
    }
    @Override
    public String toString() {
        return "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}
public class Main {
	public static void main(String[] args) {
//        System.out.println("TreeSet:自然順序 =========");
//        //String實現(xiàn)Comparable接口 使得String類型的對象是可比較   (排序方法,CompareTo)
//        TreeSet<String> treeset = new TreeSet<>();
//        //添加元素
//        treeset.add("圖形");
//        treeset.add("電話");
//        treeset.add("中國");
//
//        //遍歷元素,這里默認按照首字母由大到小順序
//        Iterator<String> itr1 = treeset.iterator();
//        while(itr1.hasNext()){
//            System.out.println(itr1.next());
//        }
//        
//        System.out.println("==========");
//        for(String s: treeset){
//            System.out.println(s);
//        }
//        //刪除元素
//        treeset.remove("電話");
//        System.out.println(treeset);
//        
        System.out.println("TreeSet:比較器順序 =========");
        //new的時候傳了一個比較器對象
        //傳單獨的比較器對象 ,實現(xiàn)Comparator接口,排序方法compare
        TreeSet<Student2> treeset1 = new TreeSet<Student2>(   new Comparator(){
            @Override
            public int compare(Object o1, Object o2) {
                //按照姓名長度 由短到長排序
                //如果姓名長度相同,則按照年齡從小到大排序
                int nameDiff = ((Student2)o1).getName().length() -  ((Student2)o2).getName().length();//獲得差值.若為負數(shù),表示第一個參數(shù) 權重小,排序后會放在前面    https://blog.csdn.net/u013066244/article/details/78997869
                if(nameDiff == 0 ){
                    return ((Student2)o1).getAge()- ((Student2)o2).getAge();
                }else{
                    return nameDiff;
                }
            }
        }   );
        //添加元素
        treeset1.add(new Student2("lisi", 22));//add(其實把值存到key里面,value是無效值---在源碼254行)
        treeset1.add(new Student2("zhangsan", 28));
        treeset1.add(new Student2("zhaoliu", 23));
        treeset1.add(new Student2("wangwu", 20));
        treeset1.add(new Student2("zhangsan", 18));
        //遍歷元素
        Iterator<Student2> itr2 = treeset1.iterator();
        while(itr2.hasNext()){
            System.out.println(itr2.next());
        }
        //System.out.println("==========");
        //for(Student2 s: treeset1){
        //  System.out.println(s);
        //}
	}
}

到此這篇關于Java中Comparable和Comparator兩種比較器的區(qū)別詳解的文章就介紹到這了,更多相關Comparable和Comparator比較器的區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • SpringBoot將所有依賴(包括本地jar包)打包到項目

    SpringBoot將所有依賴(包括本地jar包)打包到項目

    這篇文章主要介紹了SpringBoot將所有依賴(包括本地jar包)打包到項目,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Java中接口Set的特點及方法說明

    Java中接口Set的特點及方法說明

    這篇文章主要介紹了Java中接口Set的特點及方法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java生成驗證碼

    Java生成驗證碼

    本文介紹了Java生成驗證碼的流程與方法。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • 一文詳解Java Netty中的Constant類

    一文詳解Java Netty中的Constant類

    這篇文章主要介紹了Constants類即常量類是將一些常用的變量集合到一個地方的類,文中有詳細的代碼示例,感興趣的同學可以參考一下
    2023-05-05
  • 詳解在idea 中使用Mybatis Generator逆向工程生成代碼

    詳解在idea 中使用Mybatis Generator逆向工程生成代碼

    這篇文章主要介紹了在idea 中使用Mybatis Generator逆向工程生成代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • 詳解MyBatis的SqlSession獲取流程

    詳解MyBatis的SqlSession獲取流程

    SqlSession的獲取是通過SqlSessionFactory的openSession() 方法,那么具體的獲取流程是什么,所以本文就給大家詳細講解一下MyBatis的SqlSession獲取流程,需要的朋友可以參考下
    2023-07-07
  • Spring整合Mybatis框架方法剖析

    Spring整合Mybatis框架方法剖析

    這篇文章主要為大家介紹了Spring整合Mybatis框架方法剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • mybatis-plus 攔截器敏感字段加解密的實現(xiàn)

    mybatis-plus 攔截器敏感字段加解密的實現(xiàn)

    數(shù)據(jù)庫在保存數(shù)據(jù)時,對于某些敏感數(shù)據(jù)需要脫敏或者加密處理,本文主要介紹了mybatis-plus 攔截器敏感字段加解密的實現(xiàn),感興趣的可以了解一下
    2021-11-11
  • 基于Restful接口調用方法總結(超詳細)

    基于Restful接口調用方法總結(超詳細)

    下面小編就為大家?guī)硪黄赗estful接口調用方法總結(超詳細)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • 使用Redis incr解決并發(fā)問題的操作

    使用Redis incr解決并發(fā)問題的操作

    這篇文章主要介紹了使用Redis incr解決并發(fā)問題的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11

最新評論

柞水县| 余干县| 宕昌县| 普洱| 井陉县| 富裕县| 天气| 姚安县| 岗巴县| 聊城市| 安达市| 同仁县| 丁青县| 鹤岗市| 古丈县| 武川县| 嘉祥县| 尖扎县| 承德市| 阿坝县| 宁武县| 于都县| 辛集市| 桦甸市| 高安市| 定结县| 宾川县| 岑巩县| 禄丰县| 永胜县| 四川省| 来宾市| 台北市| 浮山县| 泽州县| 乌苏市| 永宁县| 金昌市| 桓台县| 虎林市| 连山|