由String.equals()方法引起的一系列思考
2019獨角獸企業(yè)重金招聘Python工程師標準>>>
? ? 廢話不多說直接貼String.euqals方法代碼
public boolean equals(Object anObject) {if (this == anObject) {return true;}if (anObject instanceof String) {String anotherString = (String)anObject;int n = value.length;if (n == anotherString.value.length) {char v1[] = value;char v2[] = anotherString.value; int i = 0;while (n-- != 0) {if (v1[i] != v2[i])return false;i++;}return true;}}return false; }在閱讀equals方法實現(xiàn)的時候對紅色字體的邏輯感覺不夠簡化(需要多定義一個變量 ?'i'?),所以自己實現(xiàn)了如下代碼(替換紅色部分),
while (n != 0) {if (v1[--n] != v2[n])return false; }自認為少定義了一個變量,可以優(yōu)化代碼行數(shù)(最近在關注代碼質量問題,開始對代碼有潔癖,多一行都感覺不夠優(yōu)雅 ^_^),然后心里小高興的讓媳婦(高前端)來探討(其實就是想炫耀了)。
? ?我們就在代碼優(yōu)雅及可讀性、常規(guī)思維的優(yōu)先級各執(zhí)己見,突然又想到數(shù)組根據下標取數(shù)據的效率快慢(這可是決定了我的優(yōu)化在效率方面是否有提升哇),趕緊查看JDK數(shù)組的實現(xiàn)。
? ? 上網查了一些資料卻沒有找到JDK 數(shù)組實現(xiàn)的相關內容,所以只能先暫時放下這個思路(有知道的大神給點提示哇)。另尋思路就是自己實現(xiàn)一個超級大的數(shù)組,然后比較數(shù)組取第一個元素及取最后一個元素的時間差,于是作者變實現(xiàn)了如下代碼:
public static void main(String[] args) {int vArr[] = new int[15464691];//jvm默認數(shù)組最大值int i = 0;while(i != 15464691){vArr[i] = i++;}long start = System.currentTimeMillis();System.out.println(vArr[0] + " time:" + (start - System.currentTimeMillis()));start = System.currentTimeMillis();System.out.println(vArr[15464690]+" time:"+(start - System.currentTimeMillis() )); }控制打印信息:
????0 time:0(多次運行中,有一次出現(xiàn)-1)
????15464690 time:0
????所以在數(shù)組取值的效率這個問題上暫且結論為是沒有影響的。
????現(xiàn)在我心里的觀點是修改后的邏輯(數(shù)組從后往前比較)與常規(guī)邏輯(從前往后比較)及代碼可閱讀性上,對咱廣大程序員來說還是小case的,那我覺著能少一個變量的定義、操作,少一行代碼,對我來說都是小小的驕傲啊(我又對代碼進行了優(yōu)化哇O(∩_∩)O哈哈~)。
? ? 現(xiàn)在未查找JDK中數(shù)組實現(xiàn)原理,所以暫且結論如上,如有哪位大大給指教一下啊。
? ? 然后坐著會繼續(xù)找一些JDK的數(shù)組實現(xiàn),再進行比較。
?
?
?
轉載于:https://my.oschina.net/u/2307114/blog/713232
總結
以上是生活随笔為你收集整理的由String.equals()方法引起的一系列思考的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java servlet拾遗(1)-Se
- 下一篇: [Machine Learning] l