欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一. 前言

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

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

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

近日研究了一下String類的一些方法, 通過查看源碼, 對一些常用的方法也有了更透徹的認(rèn)識, 也讓我更加理解了設(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)詳細(xì)地記錄了分析思路, 故對代碼不做過多說明

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)文章

  • 已有的springcloud+mybatis項目升級為mybatis-plus的方法

    已有的springcloud+mybatis項目升級為mybatis-plus的方法

    這篇文章主要介紹了已有的springcloud+mybatis項目升級為mybatis-plus,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文)

    這篇文章主要介紹了Java框架搭建之Maven、Mybatis、Spring MVC整合搭建(圖文),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-12-12
  • 深入解析Spring?Boot?的SPI機制詳情

    深入解析Spring?Boot?的SPI機制詳情

    這篇文章主要介紹了深入解析Spring?Boot的SPI機制詳情,SPI是JDK內(nèi)置的一種服務(wù)提供發(fā)現(xiàn)機制,可以用來啟用框架擴展和替換組件,主要用于框架中開發(fā),更多相關(guān)介紹,感興趣的小伙伴可以參考一下下面文章內(nèi)容
    2022-08-08
  • Java多線程下的單例模式參考

    Java多線程下的單例模式參考

    這篇文章主要演示多線程下的單例模式,分別演示了lock和synchronized兩種方案,希望能給大家做一個參考。
    2016-06-06
  • Java GUI圖形界面開發(fā)實現(xiàn)小型計算器流程詳解

    Java GUI圖形界面開發(fā)實現(xiàn)小型計算器流程詳解

    本文章向大家介紹Java GUI圖形界面開發(fā)實現(xiàn)小型計算器,主要包括布局管理器使用實例、應(yīng)用技巧、基本知識點總結(jié)和需要注意事項,具有一定的參考價值,需要的朋友可以參考一下
    2022-08-08
  • Servlet方法生命周期及執(zhí)行原理詳解

    Servlet方法生命周期及執(zhí)行原理詳解

    運行在服務(wù)器端的小程序,Servlet就是一個接口,定義了Java類被瀏覽器訪問到(tomcat識別)的規(guī)則,將來我們自定義一個類,實現(xiàn)Servlet接口,復(fù)寫方法
    2021-09-09
  • 解決IDEA中 Ctrl+ALT+V這個快捷鍵無法使用的情況

    解決IDEA中 Ctrl+ALT+V這個快捷鍵無法使用的情況

    這篇文章主要介紹了解決IDEA中 Ctrl+ALT+V這個快捷鍵無法使用的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Java通過jersey實現(xiàn)客戶端圖片上傳示例

    Java通過jersey實現(xiàn)客戶端圖片上傳示例

    本篇文章主要介紹了Java通過jersey實現(xiàn)客戶端圖片上傳示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • java循環(huán)刪除List元素報錯的原因分析與解決

    java循環(huán)刪除List元素報錯的原因分析與解決

    大家在工作中應(yīng)該都會遇到從List集合中刪除某一個或多個元素的業(yè)務(wù)場景,相信大家都會避開在循環(huán)里面刪除元素,使用其他方式處理,這是為什么呢,下面小編就來和大家詳細(xì)聊聊
    2023-11-11
  • java中如何把實體類轉(zhuǎn)成json格式的字符串

    java中如何把實體類轉(zhuǎn)成json格式的字符串

    這篇文章主要介紹了java中如何把實體類轉(zhuǎn)成json格式的字符串問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12

最新評論