1. 程式人生 > >Java Comparable介面分析與實踐

Java Comparable介面分析與實踐

此介面對實現它的每個類的物件進行整體排序。這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法。

實現此介面的物件列表(和陣列)可以通過Collections.sort或者Arrays.sort進行自動排序,這個兩個排序實現使用的時快速排序。實現此介面的物件可以用作有序對映(SortedMap<T,V>)中的鍵或者(SortedSet<T>)中的元素,無需指定比較器。

建議最好使自然排序與equals結果一致。這是因為在使用自然排序與equals不一致時,沒有顯示比較器的有序集合行為“怪異”,尤其是這樣的有序集合違背了根據euqlas方法定義的集合(或者對映表)的常規協定。

java.math.BigDecimal是個例外,自然排序排序值相等,當精確值不等的BigDecimal被視為相等。

一旦數實現了Comparable介面,你就可以跟許多泛型演算法以及依賴域該介面的集合實現進行協助。你付出很小的努力就可以獲得非常強大的功能。事實上,Java平臺類庫中的所有值類都實現了Comparable介面。如果你正在編寫一個值類,它具有非常明顯的內在排序,比如按字母排序、按數字排序或者按照年代排序,那你就堅決考慮實現該介面。

如果一個類有很多關鍵域,那麼按照什麼樣的順序來比較這些域非常重要。你必須從最關鍵的域開始,逐步進行比較,一次帶最次要的域。一電話號碼為例子。PhoneNumber類的comparaTo方法來作為例項說明:

public class PhoneNumber implements Comparable<PhoneNumber> {
    
    int areaCode;// 區號
    int prefix;// 字首
    int lineNumber;// 市號

    @Override
    public int compareTo(PhoneNumber o) {
        // 優先比較區號
        int areaCodeDiff = areaCode - o.areaCode;
        if (areaCodeDiff != 0) {
            return areaCodeDiff;
        }
        
        // 跟著比較字首
        int prefixDiff = prefix - o.prefix;
        if (prefixDiff != 0) {
            return prefixDiff;
        }
        
        // 最低優先順序比較市號
        return lineNumber - o.lineNumber;
    }

}

相關推薦

Java Comparable介面分析實踐

此介面對實現它的每個類的物件進行整體排序。這種排序被稱為類的自然排序,類的compareTo方法被稱為它的自然比較方法。 實現此介面的物件列表(和陣列)可以通過Collections.sort或者Arrays.sort進行自動排序,這個兩個排序實現使用的時快速排序。實現此介

決策樹(二)分析實踐

目錄 1 分析 1.1 背景: 1.2 定義 1.3 原理: CART如何選擇分裂的屬性? 如何進行樹的剪枝來防止過擬合 對於含有空值的資料,此時應該怎麼構建樹。 2.實踐:(《機器學習實戰》第九章程式碼解析) CART演算法的實現(運用到預剪枝) 後剪枝演算

mysql 加鎖分析實踐

一序      本文分為兩個部分,第一部分主要基於何登成大神的文章。何博士作為阿里資料庫核心團隊大神。文章更是深入淺出。膜拜一下:原文地址如下  http://hedengcheng.com/?p=771    第二部分介紹常見的實踐注意事項。 二 背景   MVCC

決策樹分析實踐

1.分析 1.1 背景和意義:        相信很多人都玩過一個網路上傳的遊戲,腦海裡面想一個名人的名字,然後出若干多道問題,比如男的女的,國外的國內的,你只能答是或不是,最後給出你想的那個名人是誰。只要不是很偏的應該都能想出來,一般人覺得很震驚,其實這只是一種簡單機器

決策樹(二)之CART的分析實踐

1 分析 1.1 背景:        線性迴歸的模型一般都要擬合所有的樣本點,但當資料擁有眾多特徵,並且特徵之間的關係十分的複雜,這時候往往是非線性的問題,很難構建全域性模型。        方法:將資料集切分成很多份易建模的的資料,再線性迴歸(就像微分一樣的思想),一

2018國內DevOps趨勢分析實踐分享

2017年年末,《中國第一份 DevOps年度調查報告》釋出,這對國內一直摸著石頭過河的DevOps先行者和DevOps在中國的發展都有著里程碑式的意義。它使國內的DevOps先行實踐者們既能夠對自身的 DevOps 實踐有明確定位,又為躊躇不前的觀望者們指明瞭軟體開發的發展

看透SpringMVC原始碼分析實踐(一)

一、網站架構及其演變過程   1.軟體的三大型別          軟體分為三個型別:單機軟體、BS結構的軟體(瀏覽器-服務端)、CS結構的軟體(客戶端-服務端)。 2.BS的基礎結構     &nb

看透SpringMVC原始碼分析實踐(二)

一、Tomcat的頂層結構及啟動過程 1.Tomcat的頂層結構        Tomcat中最頂層的容器叫Server,代表整個伺服器,Server至少包含一個Service用於具體的服務。Service主要包含兩部分,Connector和Conta

分散式鏈路監控追蹤分析實踐(一)

背景 隨著網際網路架構的擴張,分散式系統變得日趨複雜,越來越多的元件開始走向分散式化,如微服務、訊息收發、分散式資料庫、分散式快取、分散式物件儲存、跨域呼叫,這些元件共同構成了繁雜的分散式網路,那現在的問題是一個請求經過了這些服務後其中出現了一個呼叫失敗的問題,只知道有異常

C++(14)STL分析實踐之容器介面卡

STL實踐與分析 --容器介面卡 引: 除了順序容器,標準庫還提供了三種順序容器介面卡:queue,priority_queue和stack,介面卡是標準庫中的概念,包

《分散式java應用:基礎實踐》筆記3

《分散式java應用:基礎與實踐》筆記3 3.1.1原始碼編譯機制 3.1.2 類載入機制 裝載:將位元組碼裝載至JVM。識別類:類的全限定名+ClassLoader例項ID(對於介面與非陣列型類;對於陣列類,陣列的元素型別由ClassLoader載入,陣

Java排序演算法分析實現:快排、氣泡排序、選擇排序、插入排序、歸併排序(一)

轉載  https://www.cnblogs.com/bjh1117/p/8335628.html   一、概述:   本文給出常見的幾種排序演算法的原理以及java實現,包括常見的簡單排序和高階排序演算法,以及其他常用的演算法知識。   簡單排序:氣泡排序、選擇排序、

Nginx原始碼分析實踐---程序間通訊機制(訊號)

在前面我們分析了nginx程序間通訊機制的共享記憶體和套接字。這次我們分析剩下一種程序間通訊機制---訊號。 首先要區分訊號和訊號量:訊號是用於程序間通訊的機制,而訊號量是用於保證共享資源不被併發訪問的機制,如可使用訊號量作為互斥鎖實現多程序下對共享資源的同步。 1.nginx中什

Nginx原始碼分析實踐---程序間通訊機制(套接字)

在上一篇中,我們看到了nginx共享記憶體方式的程序間通訊。這次我們看下nginx使用套接字的程序間通訊方式。 同樣的幾個問題: 1.什麼時候需要使用套接字方式的程序間通訊機制呢? 舉個栗子:我們知道nginx有master程序和worker程序,那麼master程序是如何向w

Nginx原始碼分析實踐---程序間通訊機制(共享記憶體)

Nginx有一個master程序和多個worker程序,那麼master程序與worker程序間或worker程序之間是如何通訊的呢,又什麼時候需要程序間通訊呢? 我們知道linux下的程序間通訊方式主要有:管道、FIFO、套接字、訊息佇列、共享記憶體、訊號。那麼nginx的程序間通訊方式採

Nginx原始碼分析實踐---ngx_command_t

從上一節瞭解到配置項的相關屬性是由ngx_command_t這個結構體設定的,下面就來看其原始碼,分析一下。 .../src/core/ngx_core.h : typedef struct ngx_command_s ngx_command_t;由上可知,以s結尾的和以t

Nginx原始碼分析實踐---(一)編寫一個簡單的Http模組

在上一節中,我們通過修改配置檔案,便能讓nginx去訪問我們寫的html檔案,並返回給瀏覽器。問題是:nginx是如何檢測到我們寫的配置項的?檢測到後,nginx又是如何知道該進行什麼操作的? 本節通過親自實踐,寫一個經典的Hello World模組來了解相應的流程是如何進行的。我們採用自上

Comparable介面分析

現看一下該介面的定義:public interface Comparable{   public int compareTo(Object o);}該介面定義類的自然順序,實現該介面的類就可以按這種方式排序.一般要求:e1.equals((Object)e2)和e1.comp

Zabbix latest.php Insert注入分析實踐

概要 因為未能過濾掉latest.php頁面中toggle_ids陣列的輸入,導致Zabbix 2.2.x,3.0.x 遠端SQL注入 原始碼分析 下載了兩份官方程式碼對比,左為3.0.4(已修復的版本),右為3.0.3 \zabbix-3.0.3r

Django Rest Framework之Tutorial 4分析實踐

前言 在DRF所有的練習中,Tutorial 4算是比較難以理解的一部分,因此對這一節做一分析。在開始閱讀之前,強烈建議你完成Tutorial 1-3的所有內容,我們以下所有的內容都會用到前面三個練習的程式碼。 知識準備 主鍵:若某一個屬性組(注意是組)