1.將數(shù)組轉(zhuǎn)化為列表將數(shù)組轉(zhuǎn)化為一個(gè)列表時(shí),程序員們經(jīng)常這樣做:
ArrayList的構(gòu)造方法可以接受一個(gè)集合類型,剛好它也是java.util.Arrays.ArrayList的超類。 2.判斷一個(gè)數(shù)組是否包含一個(gè)值程序員們經(jīng)常這樣做:
這段代碼起作用,但是沒(méi)有必要把一個(gè)數(shù)組轉(zhuǎn)化成列表,轉(zhuǎn)化為列表需要額外的時(shí)間。它可以像下面那樣簡(jiǎn)單:
或者是:
第一種方法比第二種更容易讀 3.在一個(gè)循環(huán)中刪除一個(gè)列表中的元素思考下面這一段在循環(huán)中刪除多個(gè)元素的的代碼
輸出結(jié)果是:
在這個(gè)方法中有一個(gè)嚴(yán)重的錯(cuò)誤。當(dāng)一個(gè)元素被刪除時(shí),列表的大小縮小并且下標(biāo)變化,所以當(dāng)你想要在一個(gè)循環(huán)中用下標(biāo)刪除多個(gè)元素的時(shí)候,它并不會(huì)正常的生效。 你也許知道在循環(huán)中正確的刪除多個(gè)元素的方法是使用迭代,并且你知道java中的foreach循環(huán)看起來(lái)像一個(gè)迭代器,但實(shí)際上并不是??紤]一下下面的代碼:
它會(huì)拋出一個(gè)ConcurrentModificationException異常。
4.Hashtable與HashMap的對(duì)比就算法而言,哈希表是數(shù)據(jù)結(jié)構(gòu)的一個(gè)名字。但是在java中,這個(gè)數(shù)據(jù)結(jié)構(gòu)的名字是HashMap。Hashtable與HashMap的一個(gè)重要不同點(diǎn)是Hashtable是同步的。所以你經(jīng)常不需要Hashtable,相反HashMap經(jīng)常會(huì)用到。 HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap 5.在集合中使用原始類型在Java中原始類型與無(wú)界通配符類型很容易混合在一起,拿Set來(lái)說(shuō),Set是一個(gè)原始類型,而
這段代碼會(huì)拋出一個(gè)異常:
使用原生類型集合是危險(xiǎn)的,這是因?yàn)樵愋图咸^(guò)了泛型類型檢查,并且不是安全的,在 6.訪問(wèn)級(jí)別程序員們經(jīng)常使用public作為類字段的修飾符,可以很簡(jiǎn)單的通過(guò)引用得到值,但這是一個(gè)壞的設(shè)計(jì),按照經(jīng)驗(yàn),分配給成員變量的訪問(wèn)級(jí)別應(yīng)該盡可能的低。 public, default, protected, and private 7.ArrayList與LinkedList的對(duì)比當(dāng)程序員們不知道ArrayList與LinkedList的區(qū)別時(shí),他們經(jīng)常使用ArrayList,因?yàn)樗雌饋?lái)比較熟悉。然而,它們之前有巨大的性能差別。簡(jiǎn)而言之,如果有大量的增加刪除操作并且沒(méi)有很多的隨機(jī)訪問(wèn)元素的操作,應(yīng)該首先LinkedList。如果你剛接觸它們,請(qǐng)查看 ArrayList vs. LinkedList來(lái)獲得更多關(guān)于它們性能的信息。 8.可變與不可變不可變對(duì)象有許多的優(yōu)點(diǎn),比如簡(jiǎn)單,安全等等。但是對(duì)于每一個(gè)不同的值都需要一個(gè)獨(dú)立的對(duì)象,太多的對(duì)象可能會(huì)造成大量的垃圾回收。當(dāng)選擇可變與不可變時(shí)應(yīng)該有一個(gè)平衡。
有時(shí)在某些情況下也是需要可變對(duì)象的,比如將可變對(duì)象作為參數(shù)傳入方法,你不用使用很多語(yǔ)句便可以得到多個(gè)結(jié)果。另外一個(gè)例子是排序和過(guò)濾:當(dāng)然,你可以寫一個(gè)方法來(lái)接收原始的集合,并且返回一個(gè)排好序的集合,但是那樣對(duì)于大的集合就太浪費(fèi)了。(來(lái)自StackOverFlow的dasblinkenlight’s的答案) 9.父類與子類的構(gòu)造函數(shù)這個(gè)編譯期錯(cuò)誤的出現(xiàn)是父類默認(rèn)的構(gòu)造方法未定義,在java中,如果一個(gè)類沒(méi)有定義構(gòu)造方法,編譯器會(huì)默認(rèn)的為這個(gè)類添加一個(gè)無(wú)參的構(gòu)造方法。如果在父類中定義了構(gòu)造方法,在這個(gè)例子中是Super(String s),編譯器就不會(huì)添加默認(rèn)的無(wú)參構(gòu)造方法,這就是上面這個(gè)父類的情形。
或者2)移除父類自定義的構(gòu)造方法,或者3)在子類的構(gòu)造方法中調(diào)用父類的super(value)方法。 10.”'還是構(gòu)造器有兩種方式可以創(chuàng)建字符串
有什么區(qū)別?
關(guān)于它們內(nèi)存分配的更多信息,請(qǐng)參考Create Java String Using ” ” or Constructor?. 將來(lái)的工作這個(gè)列表是我基于大量的github上的開(kāi)源項(xiàng)目,Stack overflow上的問(wèn)題,還有一些流行的google搜索的分析。沒(méi)有明顯示的評(píng)估證明它們是前10,但它們絕對(duì)是很常見(jiàn)的。如果您不同意任一部分,請(qǐng)留下您的評(píng)論。如果您能提出其它一些常見(jiàn)的錯(cuò)誤,我將會(huì)非常感激。 原文鏈接: programcreek 翻譯: ImportNew.com - 林林譯文鏈接: http://www./12074.html [ 轉(zhuǎn)載請(qǐng)保留原文出處、譯者和譯文鏈接。] |
|