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

java代碼效率優(yōu)化方法(推薦)

 更新時間:2017年01月16日 10:02:09   投稿:jingxian  
下面小編就為大家?guī)硪黄猨ava代碼效率優(yōu)化方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

1、 盡量指定類的final修飾符 帶有final修飾符的類是不可派生的。

如果指定一個類為final,則該類所有的方法都是final。Java編譯器會尋找機(jī)會內(nèi)聯(lián)(inline)所有的 final方法(這和具體的編譯器實現(xiàn)有關(guān))。此舉能夠使性能平均提高50% 。

2、 盡量重用對象。

特別是String 對象的使用中,出現(xiàn)字符串連接情況時應(yīng)用StringBuffer 代替。由于系統(tǒng)不僅要花時間生成對象,以后可能還需花時間對這些對象進(jìn)行垃圾回收和處理。因此,生成過多的對象將會給程序的性能帶來很大的影響。

3、 盡量使用局部變量,調(diào)用方法時傳遞的參數(shù)以及在調(diào)用中創(chuàng)建的臨時變量都保存在棧(Stack)中,速度較快。

其他變量,如靜態(tài)變量、實例變量等,都在堆(Heap)中創(chuàng)建,速度較慢。另外,依賴于具體的編譯器/JVM,局部變量還可能得到進(jìn)一步優(yōu)化。請參見《盡 可能使用堆棧變量》。

4、 不要重復(fù)初始化變量

默認(rèn)情況下,調(diào)用類的構(gòu)造函數(shù)時, Java會把變量初始化成確定的值:所有的對象被設(shè)置成null,整數(shù)變量(byte、short、int、long)設(shè)置成0,float和 double變量設(shè)置成0.0,邏輯值設(shè)置成false。當(dāng)一個類從另一個類派生時,這一點(diǎn)尤其應(yīng)該注意,因為用new關(guān)鍵詞創(chuàng)建一個對象時,構(gòu)造函數(shù)鏈 中的所有構(gòu)造函數(shù)都會被自動調(diào)用。

5、 在JAVA + ORACLE 的應(yīng)用系統(tǒng)開發(fā)中,java中內(nèi)嵌的SQL語句盡量使用大寫的形式,以減輕ORACLE解析器的解析負(fù)擔(dān)。

6、 Java 編程過程中,進(jìn)行數(shù)據(jù)庫連接、I/O流操作時務(wù)必小心,在使用完畢后,即使關(guān)閉以釋放資源。

因為對這些大對象的操作會造成系統(tǒng)大的開銷,稍有不慎,會導(dǎo)致嚴(yán)重的后果。

7、 由于JVM的有其自身的GC機(jī)制,不需要程序開發(fā)者的過多考慮,從一定程度上減輕了開發(fā)者負(fù)擔(dān),但同時也遺漏了隱患,過分的創(chuàng)建對象會消耗系統(tǒng)的大量內(nèi) 存,嚴(yán)重時會導(dǎo)致內(nèi)存泄露,因此,保證過期對象的及時回收具有重要意義。

JVM回收垃圾的條件是:對象不在被引用;然而,JVM的GC并非十分的機(jī)智,即使對象滿足了垃圾回收的條件也不一定會被立即回收。所以,建議我們在對象 使用完畢,應(yīng)手動置成null。

8、 在使用同步機(jī)制時,應(yīng)盡量使用方法同步代替代碼塊同步。

9、 盡量減少對變量的重復(fù)計算

10、盡量采用lazy loading 的策略,即在需要的時候才開始創(chuàng)建。

11、慎用異常

異常對性能不利。拋出異常首先要創(chuàng)建一個新的對象。Throwable接口的構(gòu)造函數(shù)調(diào)用名為fillInStackTrace()的本地 (Native)方法,fillInStackTrace()方法檢查堆棧,收集調(diào)用跟蹤信息。只要有異常被拋出,VM就必須調(diào)整調(diào)用堆棧,因為在處理過 程中創(chuàng)建了一個新的對象。 異常只能用于錯誤處理,不應(yīng)該用來控制程序流程。

12、不要在循環(huán)中使用:

Try { 
} catch() { 
} 

應(yīng)把其放置在最外層。

13、StringBuffer 的使用:

StringBuffer表示了可變的、可寫的字符串。

有三個構(gòu)造方法 :

StringBuffer (); //默認(rèn)分配16個字符的空間
StringBuffer (int size); //分配size個字符的空間
StringBuffer (String str); //分配16個字符+str.length()個字符空間

你可以通過StringBuffer的構(gòu)造函數(shù)來設(shè)定它的初始化容量,這樣可以明顯地提升性能。

這里提到的構(gòu)造函數(shù)是StringBuffer(int length),length參數(shù)表示當(dāng)前的StringBuffer能保持的字符數(shù)量。你也可以使用ensureCapacity(int minimumcapacity)方法在StringBuffer對象創(chuàng)建之后設(shè)置它的容量。首先我們看看StringBuffer的缺省行為,然后再找 出一條更好的提升性能的途徑。

StringBuffer在內(nèi)部維護(hù)一個字符數(shù)組,當(dāng)你使用缺省的構(gòu)造函數(shù)來創(chuàng)建StringBuffer對象的時候,因為沒有設(shè)置初始化字符長 度,StringBuffer的容量被初始化為16個字符,也就是說缺省容量就是16個字符。

當(dāng)StringBuffer達(dá)到最大容量的時候,它會將自身 容量增加到當(dāng)前的2倍再加2,也就是(2*舊值+2)。

如果你使用缺省值,初始化之后接著往里面追加字符,在你追加到第16個字符的時候它會將容量增加到 34(2*16+2),當(dāng)追加到34個字符的時候就會將容量增加到70(2*34+2)。

無論何事只要StringBuffer到達(dá)它的最大容量它就不得 不創(chuàng)建一個新的字符數(shù)組然后重新將舊字符和新字符都拷貝一遍――這也太昂貴了點(diǎn)。

所以總是給StringBuffer設(shè)置一個合理的初始化容量值是錯不了 的,這樣會帶來立竿見影的性能增益。StringBuffer初始化過程的調(diào)整的作用由此可見一斑。所以,使用一個合適的容量值來初始化 StringBuffer永遠(yuǎn)都是一個最佳的建議。

14、合理的使用Java類 java.util.Vector。

簡單地說,一個Vector就是一個java.lang.Object實例的數(shù)組。Vector與數(shù)組相似,它的元素可以通過整數(shù)形式的索引訪問。但 是,Vector類型的對象在創(chuàng)建之后,對象的大小能夠根據(jù)元素的增加或者刪除而擴(kuò)展、縮小。請考慮下面這個向Vector加入元素的例子:

Object bj = new Object(); 
Vector v = new Vector(100000); 
for(int I=0; 
I<100000; I++) { v.add(0,obj); }

除非有絕對充足的理由要求每次都把新元素插入到Vector的前面,否則上面的代碼對性能不利。在默認(rèn)構(gòu)造函數(shù)中,Vector的初始存儲能力 是10個元素,如果新元素加入時存儲能力不足,則以后存儲能力每次加倍。Vector類就對象StringBuffer類一樣,每次擴(kuò)展存儲能力時,所有 現(xiàn)有的元素都要復(fù)制到新的存儲空間之中。下面的代碼片段要比前面的例子快幾個數(shù)量級:

Object bj = new Object(); 
Vector v = new Vector(100000); 
for(int I=0; I<100000; I++) { v.add(obj); }

同樣的規(guī)則也適用于Vector類的remove()方法。由于Vector中各個元素之間不能含有“空隙”,刪除除最后一個元素之外的任意其 他元素都導(dǎo)致被刪除元素之后的元素向前移動。也就是說,從Vector刪除最后一個元素要比刪除第一個元素“開銷”低好幾倍。

假設(shè)要從前面的Vector刪除所有元素,我們可以使用這種代碼:

for(int I=0; I<100000; I++) 
{ 
v.remove(0); 
}

但是,與下面的代碼相比,前面的代碼要慢幾個數(shù)量級:

for(int I=0; I<100000; I++) 
{ 
v.remove(v.size()-1); 
}

從Vector類型的對象v刪除所有元素的最好方法是:

v.removeAllElements();

假設(shè)Vector類型的對象v包含字符串“Hello”??紤]下面的代碼,它要從這個Vector中刪除“Hello”字符串:

String s = “Hello”;
int i = v.indexOf(s);
if(I != -1) v.remove(s);

這些代碼看起來沒什么錯誤,但它同樣對性能不利。在這段代碼中,indexOf()方法對v進(jìn)行順序搜索尋找字符串 “Hello”,remove(s)方法也要進(jìn)行同樣的順序搜索。改進(jìn)之后的版本是:

String s = “Hello”;
int i = v.indexOf(s);
if(I != -1) v.remove(i);

這個版本中我們直接在remove()方法中給出待刪除元素的精確索引位置,從而避免了第二次搜索。一個更好的版本是:
String s = “Hello”; v.remove(s);

最后,我們再來看一個有關(guān)Vector類的代碼片段:

for(int I=0; I++;I < v.length)

如果v包含100,000個元素,這個代碼片段將調(diào)用v.size()方法100,000次。雖然size方法是一個簡單的方法,但它仍舊需要 一次方法調(diào)用的開銷,至少JVM需要為它配置以及清除堆棧環(huán)境。在這里,for循環(huán)內(nèi)部的代碼不會以任何方式修改Vector類型對象v的大小,因此上面 的代碼最好改寫成下面這種形式:

int size = v.size(); for(int I=0; I++;I<size)

雖然這是一個簡單的改動,但它仍舊贏得了性能。畢竟,每一個CPU周期都是寶貴的。

15、當(dāng)復(fù)制大量數(shù)據(jù)時,使用System.arraycopy()命令。

16、代碼重構(gòu):增強(qiáng)代碼的可讀性。

17、不用new關(guān)鍵詞創(chuàng)建類的實例

用new關(guān)鍵詞創(chuàng)建類的實例時,構(gòu)造函數(shù)鏈中的所有構(gòu)造函數(shù)都會被自動調(diào)用。但如果一個對象實現(xiàn)了Cloneable接口,我們可以調(diào)用它的 clone()方法。clone()方法不會調(diào)用任何類構(gòu)造函數(shù)。

在使用設(shè)計模式(Design Pattern)的場合,如果用Factory模式創(chuàng)建對象,則改用clone()方法創(chuàng)建新的對象實例非常簡單。例如,下面是Factory模式的一個 典型實現(xiàn):

public static Credit getNewCredit() { 
return new Credit(); 
} 

改進(jìn)后的代碼使用clone()方法,如下所示:

private static Credit BaseCredit = new Credit(); 
public static Credit getNewCredit() { 
return (Credit) BaseCredit.clone(); 
} 

上面的思路對于數(shù)組處理同樣很有用。

18、乘法和除法,用移位操作替代乘法操作可以極大地提高性能。

19、在JSP頁面中關(guān)閉無用的會話。

一個常見的誤解是以為session在有客戶端訪問時就被創(chuàng)建,然而事實是直到某server端程序調(diào)用 HttpServletRequest.getSession(true)這樣的語句時才被創(chuàng)建,注意如果JSP沒有顯示的使用 <%@pagesession=”false”%> 關(guān)閉session,則JSP文件在編譯成Servlet時將會自動加上這樣一條語句HttpSession session = HttpServletRequest.getSession(true);這也是JSP中隱含的session對象的來歷。由于session會消耗內(nèi) 存資源,因此,如果不打算使用session,應(yīng)該在所有的JSP中關(guān)閉它。

對于那些無需跟蹤會話狀態(tài)的頁面,關(guān)閉自動創(chuàng)建的會話可以節(jié)省一些資源。使用如下page指令:<%@ page session=”false”%>

20、JDBC與I/O

如果應(yīng)用程序需要訪問一個規(guī)模很大的數(shù)據(jù)集,則應(yīng)當(dāng)考慮使用塊提取方式。默認(rèn)情況下,JDBC每次提取32行數(shù)據(jù)。舉例來說,假設(shè)我們要遍歷一個5000 行的記錄集,JDBC必須調(diào)用數(shù)據(jù)庫157次才能提取到全部數(shù)據(jù)。如果把塊大小改成512,則調(diào)用數(shù)據(jù)庫的次數(shù)將減少到10次。

21、Servlet與內(nèi)存使用

許多開發(fā)者隨意地把大量信息保存到用戶會話之中。一些時候,保存在會話中的對象沒有及時地被垃圾回收機(jī)制回收。從性能上看,典型的癥狀是用戶感到系統(tǒng)周期 性地變慢,卻又不能把原因歸于任何一個具體的組件。如果監(jiān)視JVM的堆空間,它的表現(xiàn)是內(nèi)存占用不正常地大起大落。

解決這類內(nèi)存問題主要有二種辦法。第一種辦法是,在所有作用范圍為會話的Bean中實現(xiàn)HttpSessionBindingListener接口。這 樣,只要實現(xiàn)valueUnbound()方法,就可以顯式地釋放Bean使用的資源。

另外一種辦法就是盡快地把會話作廢。大多數(shù)應(yīng)用服務(wù)器都有設(shè)置會話作廢間隔時間的選項。另外,也可以用編程的方式調(diào)用會話的 setMaxInactiveInterval()方法,該方法用來設(shè)定在作廢會話之前,Servlet容器允許的客戶請求的最大間隔時間,以秒計。

22、使用緩沖標(biāo)記

一些應(yīng)用服務(wù)器加入了面向JSP的緩沖標(biāo)記功能。例如,BEA的WebLogic Server從6.0版本開始支持這個功能,Open Symphony工程也同樣支持這個功能。JSP緩沖標(biāo)記既能夠緩沖頁面片斷,也能夠緩沖整個頁面。當(dāng)JSP頁面執(zhí)行時,如果目標(biāo)片斷已經(jīng)在緩沖之中,則 生成該片斷的代碼就不用再執(zhí)行。頁面級緩沖捕獲對指定URL的請求,并緩沖整個結(jié)果頁面。對于購物籃、目錄以及門戶網(wǎng)站的主頁來說,這個功能極其有用。對 于這類應(yīng)用,頁面級緩沖能夠保存頁面執(zhí)行的結(jié)果,供后繼請求使用。

23、選擇合適的引用機(jī)制

在典型的JSP應(yīng)用系統(tǒng)中,頁頭、頁腳部分往往被抽取出來,然后根據(jù)需要引入頁頭、頁腳。當(dāng)前,在JSP頁面中引入外部資源的方法主要有兩 種:include指令,以及include動作。

include指令:例如<%@ include file=”copyright.html” %>。該指令在編譯時引入指定的資源。在編譯之前,帶有include指令的頁面和指定的資源被合并成一個文件。被引用的外部資源在編譯時就確定, 比運(yùn)行時才確定資源更高效。

include動作:例如<jsp:include page=”copyright.jsp” />。該動作引入指定頁面執(zhí)行后生成的結(jié)果。由于它在運(yùn)行時完成,因此對輸出結(jié)果的控制更加靈活。但時,只有當(dāng)被引用的內(nèi)容頻繁地改變時,或者在對 主頁面的請求沒有出現(xiàn)之前,被引用的頁面無法確定時,使用include動作才合算。

24、及時清除不再需要的會話

為了清除不再活動的會話,許多應(yīng)用服務(wù)器都有默認(rèn)的會話超時時間,一般為30分鐘。當(dāng)應(yīng)用服務(wù)器需要保存更多會話時,如果內(nèi)存容量不足,操作系統(tǒng)會把部分 內(nèi)存數(shù)據(jù)轉(zhuǎn)移到磁盤,應(yīng)用服務(wù)器也可能根據(jù)“最近最頻繁使用”(Most Recently Used)算法把部分不活躍的會話轉(zhuǎn)儲到磁盤,甚至可能拋出“內(nèi)存不足”異常。在大規(guī)模系統(tǒng)中,串行化會話的代價是很昂貴的。當(dāng)會話不再需要時,應(yīng)當(dāng)及時 調(diào)用HttpSession.invalidate()方法清除會話。HttpSession.invalidate()方法通常可以在應(yīng)用的退出頁面調(diào) 用。

25、不要將數(shù)組聲明為:public static final 。

26、HashMap的遍歷效率討論

經(jīng)常遇到對HashMap中的key和value值對的遍歷操作,有如下兩種方法:

Map<String, String[]> paraMap = new

HashMap<String, String[]>(); 
…………….//第一個循環(huán) 
Set<String> appFieldDefIds = paraMap.keySet(); 
for (String appFieldDefId : appFieldDefIds) { 
String[] values = paraMap.get(appFieldDefId); 
…… 
}

//第二個循環(huán) 
for(Entry<String, String[]> entry : paraMap.entrySet()){ 
String appFieldDefId = entry.getKey(); 
String[] values = entry.getValue(); 
……. 
}

第一種實現(xiàn)明顯的效率不如第二種實現(xiàn)。

分析如下 Set<String> appFieldDefIds = paraMap.keySet(); 是先從HashMap中取得keySet

代碼如下:

public Set<K> keySet() { 
Set<K> ks = keySet; 
return (ks != null ? ks : (keySet = new KeySet())); 
}

private class KeySet extends AbstractSet<K> { 
public Iterator<K> iterator() { 
return newKeyIterator(); 
} 
public int size() { 
return size; 
} 
public boolean contains(Object o) { 
return containsKey(o); 
} 
public boolean remove(Object o) { 
return HashMap.this.removeEntryForKey(o) != null; 
} 
public void clear() { 
HashMap.this.clear(); 
} 
} 

其實就是返回一個私有類KeySet, 它是從AbstractSet繼承而來,實現(xiàn)了Set接口。

再來看看for/in循環(huán)的語法

for(declaration : expression) 
statement

在執(zhí)行階段被翻譯成如下各式

for(Iterator<E> #i = (expression).iterator(); #i.hashNext();){ 
declaration = #i.next(); 
statement 
}

因此在第一個for語句for (String appFieldDefId : appFieldDefIds) 中調(diào)用了HashMap.keySet().iterator()

而這個方法調(diào)用了newKeyIterator()

Iterator<K> newKeyIterator() { 
return new KeyIterator(); 
} 
private class KeyIterator extends HashIterator<K> { 
public K next() { 
return nextEntry().getKey(); 
} 
}

所以在for中還是調(diào)用了

在第二個循環(huán)for(Entry<String, String[]> entry : paraMap.entrySet())中使用的Iterator是如下的一個內(nèi)部類

private class EntryIterator extends HashIterator<Map.Entry<K,V>> { 
public Map.Entry<K,V> next() { 
return nextEntry(); 
} 
}

此時第一個循環(huán)得到key,第二個循環(huán)得到HashMap的Entry效率就是從循環(huán)里面體現(xiàn)出來的第二個循環(huán)此致可以直接取key和value值 而第一個循環(huán)還是得再利用HashMap的get(Object key)來取value值現(xiàn)在看看HashMap的get(Object key)方法

public V get(Object key) { 
Object k = maskNull(key); 
int hash = hash(k); 
int i = indexFor(hash, table.length); //Entry[] table 
Entry<K,V> e = table; 
while (true) { 
if (e == null) 
return null; 
if (e.hash == hash && eq(k, e.key)) 
return e.value; 
e = e.next; 
} 
} 

其實就是再次利用Hash值取出相應(yīng)的Entry做比較得到結(jié)果,所以使用第一中循環(huán)相當(dāng)于兩次進(jìn)入HashMap的Entry

中而第二個循環(huán)取得Entry的值之后直接取key和value,效率比第一個循環(huán)高。其實按照Map的概念來看也應(yīng)該是用第二個循環(huán)好一點(diǎn),它本 來就是key和value的值對,將key和value分開操作在這里不是個好選擇。

27、array(數(shù)組) 和 ArryList的使用

array([]):最高效;但是其容量固定且無法動態(tài)改變;

ArrayList:容量可動態(tài)增長;但犧牲效率;

基于效率和類型檢驗,應(yīng)盡可能使用array,無法確定數(shù)組大小時才使用ArrayList!

ArrayList是Array的復(fù)雜版本

ArrayList內(nèi)部封裝了一個Object類型的數(shù)組,從一般的意義來說,它和數(shù)組沒有本質(zhì)的差別,甚至于ArrayList的許多方法,如 Index、IndexOf、Contains、Sort等都是在內(nèi)部數(shù)組的基礎(chǔ)上直接調(diào)用Array的對應(yīng)方法。

ArrayList存入對象時,拋棄類型信息,所有對象屏蔽為Object,編譯時不檢查類型,但是運(yùn)行時會報錯。

注:jdk5中加入了對泛型的支持,已經(jīng)可以在使用ArrayList時進(jìn)行類型檢查。

從這一點(diǎn)上看來,ArrayList與數(shù)組的區(qū)別主要就是由于動態(tài)增容的效率問題了

28、盡量使用HashMap 和ArrayList ,除非必要,否則不推薦使用HashTable和Vector ,后者由于使用同步機(jī)制,而導(dǎo)致了性能的開銷。

以上這篇java代碼效率優(yōu)化方法(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java聊天室之實現(xiàn)客戶端群聊功能

    Java聊天室之實現(xiàn)客戶端群聊功能

    這篇文章主要為大家詳細(xì)介紹了Java簡易聊天室之實現(xiàn)客戶端群聊功能,文中的示例代碼講解詳細(xì),具有一定的借鑒價值,需要的可以了解一下
    2022-10-10
  • Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案

    Mybatis中foreach標(biāo)簽帶來的空格\換行\(zhòng)回車問題及解決方案

    這篇文章主要介紹了解決Mybatis中foreach標(biāo)簽帶來的空格,換行,回車問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • spring cloud學(xué)習(xí)教程之config修改配置詳解

    spring cloud學(xué)習(xí)教程之config修改配置詳解

    這篇文章主要給大家介紹了關(guān)于spring cloud學(xué)習(xí)教程之config修改配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-09-09
  • Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的方法

    Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的方法

    本篇文章主要介紹了Spring Cloud Ribbon實現(xiàn)客戶端負(fù)載均衡的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • Java中為什么this可以調(diào)用當(dāng)前實例

    Java中為什么this可以調(diào)用當(dāng)前實例

    本文主要介紹了為什么可以通過this關(guān)鍵字訪問到當(dāng)前對象呢,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Jmeter配置代理實現(xiàn)錄制過程圖解

    Jmeter配置代理實現(xiàn)錄制過程圖解

    這篇文章主要介紹了Jmeter配置代理實現(xiàn)錄制過程圖解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • 用java實現(xiàn)猜數(shù)字游戲

    用java實現(xiàn)猜數(shù)字游戲

    這篇文章主要為大家詳細(xì)介紹了用java實現(xiàn)猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 在Java編程中定義方法

    在Java編程中定義方法

    這篇文章主要介紹了在Java編程中定義方法,是Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-10-10
  • IDEA無法識別SpringBoot項目的簡單解決辦法

    IDEA無法識別SpringBoot項目的簡單解決辦法

    今天使用idea的時候,遇到idea無法啟動springboot,所以這篇文章主要給大家介紹了關(guān)于IDEA無法識別SpringBoot項目的簡單解決辦法,需要的朋友可以參考下
    2023-08-08
  • Java實現(xiàn)LeetCode(1.兩數(shù)之和)

    Java實現(xiàn)LeetCode(1.兩數(shù)之和)

    這篇文章主要介紹了Java實現(xiàn)LeetCode(兩數(shù)之和),本文使用java采用多種發(fā)放實現(xiàn)了LeetCode的兩數(shù)之和題目,需要的朋友可以參考下
    2021-06-06

最新評論