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

歡迎訪問 生活随笔!

生活随笔

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

java

java comparator_Java基础之String漫谈(二)

發布時間:2023/12/1 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java comparator_Java基础之String漫谈(二) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java-String

1. 導讀

上期分享了本人關于String四個問題, 本期我們繼續探討String中的兩個問題:

.1 String既然已經實現了Comparable接口, 為什么還要提供內部類----CaseInsensitiveComparator;

.2 使用 "+" 拼接String究竟干了什么? 為什么在循環中不讓使用"+"拼接String;

2. String為什么要提供內部類CaseInsensitiveComparator

先來看下String實現了Comparable接口后做了什么:

String::compareTo.jpg

String::compareTo做了三件事:

.1 比較兩個字符串的長度, 找出最小值;

.2 比較最小長度中的字符是否相同, 因底層使用ASCII碼存儲, 10進制的ASCII是純數字, 可直接減得出比較結果(compareTo規定: 返回-1是小于; 0是等于; 1是大于);

.3 如果最小長度的字符都相同, 再比較兩個字符串的長度是否相同;

字符串是可能含有大小寫的, 在String::compareTo中認為A和a是不同的, 那么在忽略大小寫的場景中就不適用了;既然String提供了基于Comparator的內部類, 是不是對這種場景做了特殊處理呢?我們接下來看CaseInsensitiveComparator的核心實現:

可以看到compare的邏輯和String:compareTo大同小異, 只是在第二步的時候做了特殊處理:

.1 先將char字符轉換成大寫作比較(如果是數字則不變);

.2 如果大寫比較不符, 再轉換成小寫做比較;

.3 如果小寫比較還是不符, 證明該char字符為數字, 直接比較即可;

上面只是說明了這兩者實現的不同, 還是沒有說明為什么這么實現; 要解答這個首先需要說明下Comparable 和Comparator的異同:

.1 兩者都是接口, 都是實現對象的比較的, 返回值都是{-1, 0, 1};

.2 Comparable需要重寫Comparable::compareTo方法, 會對比較對象的代碼形成侵入; Comparator由一個比較目標對象的策略類來實現, 同時比較策略則由編寫者指定, 無需侵入比較對象的代碼;故而String實現Comparable接口提供了一種內排序的方式, 而Comparator提供了一種不改變比較對象代碼, 實現比較的策略, 如果對CaseInsensitiveComparator的實現并不滿意, 也可以自己實現MySelfComparator;

劃重點:

.1 CaseInsensitiveComparator的實現只是String作者提供了一種不同于String::compareTo的比較策略, 如果說Compareable是比較的內部實現, 那么Comparator就是比較的外部實現;

.2 Comparator這種方式實現了策略模式, 將變與不變完美分類; 關于設計模式后面再開專題分享;

.3 Comparator接口中還有個equals方法沒有實現, 不實現這個方法為什么不報錯呢? 因為所有類的父類都是Object,Object::equals已經對這個方法做了實現, 也就不報錯了;

.4 如果Compareable::compareTo 或者 Comparator::compare的實現的比較結果與equals不符時, 你需要考慮這種情況會不會有影響;比如HashMap中先調用equals再調用的compareTo, 這時候如果equals與compareTo的結果是不一致, 不就引起問題了; 雖然實現了Compareable接口不強制重寫equals方法, 但是不一致的情況還是需要考慮下的;

3. String字符串拼接的三種方式比較

對于字符串拼接, 我們可以使用一下三種方式:

.1 "+

總結

以上是生活随笔為你收集整理的java comparator_Java基础之String漫谈(二)的全部內容,希望文章能夠幫你解決所遇到的問題。

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