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

java源碼解析之String類的compareTo(String otherString)方法

 更新時間:2018年09月10日 14:10:28   作者:dremeue  
這篇文章主要給大家介紹了關(guān)于java源碼解析之String類的compareTo(String otherString)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一. 前言

最近我發(fā)現(xiàn)了一個事情,那就是在面試筆試中,好多公司都喜歡在String字符串上出問題,涉及到方方面面的知識,包括其中的一些常用方法。

String 類代表字符串。Java 程序中的所有字符串字面值(如 "abc" )都作為此類的實例實現(xiàn)。

字符串是常量;它們的值在創(chuàng)建之后不能更改。字符串緩沖區(qū)支持可變的字符串。因為 String 對象是不可變的,所以可以共享。

近日研究了一下String類的一些方法, 通過查看源碼, 對一些常用的方法也有了更透徹的認識, 也讓我更加理解了設(shè)計者的算法思想.

我也推薦大家多讀讀源碼, 我相信大家也會有意想不到的收獲.

二. 實戰(zhàn)

今天我分析的是String類的compareTo(String otherString)方法,

以下是我個人的分析觀點, 如有哪里分析不到位的地方, 歡迎大家指出, 相互學(xué)習(xí), 共同進步 !

首先, 尊重原作者, 先放上源碼

public int compareTo(String anotherString) {
 int len1 = value.length;
 int len2 = anotherString.value.length;
 int lim = Math.min(len1, len2);
 char v1[] = value;
 char v2[] = anotherString.value;

 int k = 0;
 while (k < lim) {
  char c1 = v1[k];
  char c2 = v2[k];
  if (c1 != c2) {
  return c1 - c2;
  }
  k++;
 }
 return len1 - len2;
 }

下面的是我自己寫的山寨compareTo()方法, 經(jīng)測試, 結(jié)果與compareTo(String otherString)返回一致

說明:

1. 為避免沖突, 我定義的方法名為compares

2. 注釋中已經(jīng)詳細地記錄了分析思路, 故對代碼不做過多說明

public class StringDemo {
 
 @Test
 public void test() {
 
 // 因為o的ASCII碼為: 111
 // 因為a的ASCII碼為: 97
 // 所以差為 : 111 - 97 = 14
 // 返回值為:14, 與compareTo返回結(jié)果一致
 System.out.println(compares("hellojava", "hellajava"));
 }
 
 public static int compares(String firstString, String lastString) {
  /*
  * 算法思路分析: 
  * 1. 獲取2個字符串, 首先把2個字符串都轉(zhuǎn)化為字符數(shù)組 (為后面一個一個字符進行比較做鋪墊)
  * 2. 獲取2個字符串的長度, 并把最短的字符串長度作為循環(huán)的次數(shù) (這樣可以避免數(shù)組越界的異常)
  * 3. 把2個字符串從0開始遍歷, 比較每一個字符, 若字符不相等時, 則返回兩個字符串的差值
  * 4. 如果遍歷的字符串都相等時, 則返回兩個字符串的長度差
  * 
  * 方法結(jié)果: 
  * 1. 若兩個字符串長度和字符都相等時, 則返回0
  * 2. 若兩個字符長度不相等, 但大串完全包含(順序和字符都相等)小串字符時, 則返回兩個字符串的長度的差值
  *  舉例: 
  *  大串: helloworlds
  *  小串: helloworld
  *  因為大串完全包含小串, 所以返回長度的差值, 為1
  * 3. 若兩個字符串長度和字符都不相等時, 則返回比較過程中, 某個索引位置上的字符之差
  *  舉例: 
  *  串1: hellojavas
  *  串2: hellajava
  *  遍歷比較后, 索引4的字符不同, 所以返回兩個字符的差值14, 'o' - 'a' = 14
  */
  
  /*
  * 1. 獲取2個字符串, 首先把2個字符串都轉(zhuǎn)化為字符數(shù)組 (為后面一個一個字符進行比較做鋪墊)
  */
  char[] firstCh = firstString.toCharArray();
  char[] lastCh = lastString.toCharArray();
  
  /*
  * 2. 獲取2個字符串的長度, 并把最短的字符串長度作為循環(huán)的次數(shù) (這樣可以避免數(shù)組越界的異常)
  */
  int firstLength = firstCh.length;
  int lastLength = lastCh.length;
  int lim = Math.min(firstLength, lastLength);
  
  // 用k記錄比較的索引
  int k = 0;
  while(k < lim) {
  char c1 = firstCh[k];
  char c2 = lastCh[k];
  
  // 3. 把2個字符串從0開始遍歷, 比較每一個字符, 若字符不相等時, 則返回兩個字符串的差值
  if(c1 != c2) {
   return c1 - c2;
  }
  
  // 如果字符相等, 則讓索引加1
  k++;
  }
  
  // 4. 如果遍歷的字符串都相等時, 則返回兩個字符串的長度差
  return firstLength - lastLength;
 }
}

三. 小結(jié)

通過源碼的學(xué)習(xí), 讓我有一種知其然知其所以然的感覺, 后期會繼續(xù)分享更多源碼分析, 與大家共同學(xué)習(xí) !

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • java中url漢字編碼互相轉(zhuǎn)換實例

    java中url漢字編碼互相轉(zhuǎn)換實例

    這篇文章介紹了java中url漢字編碼互相轉(zhuǎn)換實例,有需要的朋友可以參考一下
    2013-10-10
  • 解決idea無法導(dǎo)入識別本地類的問題

    解決idea無法導(dǎo)入識別本地類的問題

    今天做實驗不知道按了哪里不能導(dǎo)入識別本地的類,只有jar包的類,百度搜索也沒有找到合理的解決方案,經(jīng)過朋友援助問題根源找到,下面小編把解決方法分享給大家,需要的朋友參考下吧
    2021-08-08
  • Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖

    Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖

    今天小編就為大家分享一篇關(guān)于Java調(diào)用echarts提供的地圖壓縮方法來壓縮地圖,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • MyBatis版本升級導(dǎo)致OffsetDateTime入?yún)⒔馕霎惓栴}復(fù)盤

    MyBatis版本升級導(dǎo)致OffsetDateTime入?yún)⒔馕霎惓栴}復(fù)盤

    這篇文章主要介紹了MyBatis版本升級導(dǎo)致OffsetDateTime入?yún)⒔馕霎惓栴}復(fù)盤,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 使用Java實現(xiàn)簡單的區(qū)塊鏈程序的方法

    使用Java實現(xiàn)簡單的區(qū)塊鏈程序的方法

    這篇文章主要介紹了使用Java實現(xiàn)簡單的區(qū)塊鏈程序的方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • java語言中封裝類代碼示例

    java語言中封裝類代碼示例

    這篇文章主要介紹了java語言中封裝類,涉及相關(guān)代碼示例及結(jié)果分析,以及封裝的好處簡單介紹,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • 利用Java實現(xiàn)帶GUI的氣泡詩詞特效

    利用Java實現(xiàn)帶GUI的氣泡詩詞特效

    這篇文章主要為大家介紹了如何利用Java語言實現(xiàn)帶GUI的氣泡詩詞特效,文中的示例代碼講解詳細,對我們學(xué)習(xí)Java有一定幫助,感興趣的可以了解一下
    2022-08-08
  • Java把list分成多個list的方法示例

    Java把list分成多個list的方法示例

    在編程中將大的list集合拆分為多個小集合可以提高處理效率,主要拆分方法包括等量拆分適用于均勻處理數(shù)據(jù)、?指定數(shù)量拆分按固定子集大小劃分、根據(jù)條件拆分按特定規(guī)則進行,這些方法有助于多線程異步處理,需要的朋友可以參考下
    2024-11-11
  • 劍指Offer之Java算法習(xí)題精講二叉樹專題篇上

    劍指Offer之Java算法習(xí)題精講二叉樹專題篇上

    跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會發(fā)現(xiàn)質(zhì)的變化
    2022-03-03
  • Java遞歸算法詳解(動力節(jié)點整理)

    Java遞歸算法詳解(動力節(jié)點整理)

    Java遞歸算法是基于Java語言實現(xiàn)的遞歸算法。遞歸算法對解決一大類問題很有效,它可以使算法簡潔和易于理解。接下來通過本文給大家介紹Java遞歸算法相關(guān)知識,感興趣的朋友一起學(xué)習(xí)吧
    2017-03-03

最新評論

兴业县| 柘荣县| 仪陇县| 阳泉市| 永春县| 堆龙德庆县| 龙江县| 遵义市| 五台县| 黑水县| 潼关县| 江都市| 寻乌县| 略阳县| 清丰县| 信宜市| 新和县| 武清区| 潞西市| 辰溪县| 蕲春县| 朔州市| 忻城县| 东阳市| 天津市| 淳安县| 阆中市| 永平县| 兰溪市| 孝感市| 南充市| 启东市| 额尔古纳市| 剑川县| 溆浦县| 平潭县| 万盛区| 原平市| 成武县| 郓城县| 全南县|