Java程式設計師常犯的幾大錯誤
1.ArrayList與LinkedList
當開發人員不知道之間的區別ArrayList和LinkedList他們經常使用ArrayList,因為它看起來很熟悉。但是,它們之間存在巨大的效能差異。LinkedList如果存在大量的新增/刪除操作並且沒有大量的隨機訪問操作,則應該首選。
2.可變與不可變
不可變物件具有諸如簡單性,安全性等諸多優點。但是,它需要為每個不同的值分別建立一個物件,並且過多的物件可能會導致垃圾收集的高成本。在可變和不可變之間進行選擇時應該有一個平衡。
通常,可變物件用於避免產生太多中間物件。一個典型的例子是連線大量的字串。如果你使用一個不可變的字串,你會產生很多物件,這些物件可以立即進行垃圾回收。這浪費了時間和精力在CPU上,使用可變物件的正確解決方案(例如StringBuilder)。
小編是一個有著5年工作經驗的java程式設計師,對於java,自己有做資料的整合,一個完整學習java的路線,學習資料和工具,相信這裡有很多學習java的小夥伴,我創立了一個2000人學習扣群,479121291。每晚都有java的直播課程。無論是初級還是進階的小夥伴小編我都歡迎!
3.Super和Sub的建構函式
在Java中,如果一個類沒有定義建構函式,編譯器預設會為該類插入一個預設的無參建構函式。如果在Super類中定義了一個建構函式,在這種情況下,Super(String s),編譯器不會插入預設的無引數建構函式。這是上面超級類的情況。
Sub類的建構函式(帶有-argument或no-argument)將呼叫無引數的Super建構函式。由於編譯器試圖向Sub類中的2個建構函式中插入super,但Super的預設建構函式未定義,因此編譯器會報告錯誤訊息。
要解決這個問題,只需要1)新增一個Super建構函式給Super類
4.使用原始型別的集合
在Java中,原始型別和無界萬用字元型別很容易混合在一起。以Set為例,Set是原始型別,Set而是無界萬用字元型別。
考慮使用原始型別List作為引數的以下程式碼:
這段程式碼會丟擲一個異常,使用原始型別集合是危險的,因為原始型別集合跳過了泛型型別檢查並且不安全。
5.檢查陣列是否包含值
開發人員經常這樣做:
程式碼有效,但不需要先將列表轉換為首先設定。將列表轉換為集合需要額外的時間。它可以像下面這樣簡單:Arrays.asList(arr).contains(targetValue);
要麼:
6.從迴圈內的列表中刪除元素
下面的程式碼在迭代過程中刪除元素:
這種方法存在嚴重的問題。當一個元素被刪除時,列表的大小會縮小,並且索引也會改變。所以,如果你想通過使用索引刪除迴圈內的多個元素,那將無法正常工作。
您可能知道使用迭代器是刪除迴圈內部元素的正確方法,並且您知道Java中的foreach迴圈像迭代器一樣工作,但事實上並非如此。考慮下面的程式碼:
它會丟擲ConcurrentModificationException。
相反,以下是確定的:
.next必須在之前被呼叫.remove。在foreach迴圈中,編譯器會.next在刪除元素的操作之後呼叫該函式,從而導致該操作ConcurrentModificationException。你可能想看看ArrayList.iterator的原始碼。
好啦今天的學習文章就到這裡了喜歡關注一下吧。