第二次大作業BLOG心得

付佳愉發表於2024-06-05

(1)前言:
知識點:
①ArrayLsit的知識點:
ArrayList 是 Java 中的動態陣列實現,它提供了自動調整大小的功能,可以根據需要動態增長或收縮。
ArrayList 可以儲存任意型別的物件,並支援隨機訪問,即可以透過索引快速訪問列表中的元素。
ArrayList 內部透過陣列實現,當元素數量超出當前陣列容量時,會自動擴充套件陣列大小,通常是原來容量的 1.5 倍。
ArrayList 允許重複元素,並且可以在列表的任意位置插入和刪除元素,但在插入和刪除操作時,可能需要移動大量元素,因此效能可能受影響。
ArrayList 是執行緒不安全的,不適合在多執行緒環境下使用,如果需要在多執行緒環境中使用,可以考慮使用 java.util.concurrent.CopyOnWriteArrayList。
②hashmap的知識點:
HashMap 是 Java 中的雜湊對映實現,它儲存鍵值對,並根據鍵的雜湊碼來快速查詢值。
HashMap 使用雜湊表資料結構來儲存鍵值對,當我們將鍵值對插入到 HashMap 中時,HashMap 會根據鍵的雜湊碼來計算出儲存位置,並將鍵值對儲存在對應位置的桶中。
HashMap 允許 null 鍵和 null 值,並且允許重複的值,但不允許重複的鍵。
HashMap 的效能在大多數情況下是非常高效的,平均情況下,插入、刪除和查詢操作的時間複雜度為 O(1),但在最壞情況下可能達到 O(n),這通常發生在雜湊衝突較多時。
在 Java 8 之前,HashMap 是不保證元素順序的,但在 Java 8 中引入了 LinkedHashMap,它保留了元素插入的順序。
HashMap 是非執行緒安全的,如果需要在多執行緒環境中使用,可以考慮使用 java.util.concurrent.ConcurrentHashMap。
③正規表示式的知識點:
正規表示式是一種用來描述字串匹配規則的工具,它可以用來檢查字串是否符合特定的模式,或者從字串中提取符合模式的子串。
正規表示式中的基本元字元包括字母、數字和一些特殊字元,例如 . 表示任意字元,* 表示零個或多個前面的字元等。
正規表示式中的量詞可以用來指定模式中字元或子表示式的重複次數,例如 + 表示至少一個,? 表示零個或一個,{n} 表示重複 n 次等。
正規表示式還支援字元類、分組、反向引用、邊界匹配等高階功能,這些功能使得它在處理複雜的字串匹配和替換任務時非常強大。
在 Java 中,正規表示式主要透過 java.util.regex 包中的類實現,例如 Pattern 和 Matcher。透過這些類,我們可以在 Java 中使用正規表示式來進行字串匹配和操作。

在這次作業中,我靈活運用以上三個知識點,使得我對Java的瞭解更加深入,這也是我作業完成的主要幫手
題量:適中

難度:大

(2)設計與分析:
這是我的設計類圖

我設計了13個類
我認為最困難的地方是對裝置資訊的處理,以下是我對裝置資訊的處理的程式碼

(3)採坑心得:
在這次大作業中,我認為最困難的是正確處理資訊,在我的輸出中出現最多的是輸出NULL

原因:輸出null的原因是未對輸入的資料進行正確的處理
(4)改進建議:
在我的程式碼中,子類有些重複贅餘的部分,例如各裝置,因此我透過抽象的方法將他們的重複部分設計於父類中eDevice中,這樣不僅簡化了程式碼,而且提高了執行速度,降低了程式碼之間的耦合度,使得程式碼可讀性更強。
例如:我將子裝置的對資訊資料的處理抽象於父類eDevice中
(父類的資料處理的抽象方法)

(電扇的資料處理程式碼)

(燈的資料處理程式碼)

(5)總結:
①從hashmap的使用中我學會了如何高效地對字串集合的增加,刪除,修改的處理,之前使用連結串列時,覺得逐一新增很麻煩,還需要查詢,但是透過hashmap的使用,大大縮減了程式碼工程量,除此之外,HashMap 相較於列表(如 ArrayList)具有一些明顯的優勢和好處,主要包括:

快速查詢:

HashMap 使用鍵值對儲存資料,並根據鍵的雜湊碼將資料儲存在內部的雜湊表中。這使得 HashMap 能夠在常數時間內(O(1))查詢特定的鍵,而不受到列表中元素數量的影響。相比之下,列表的查詢速度取決於元素數量,並且通常需要遍歷整個列表來查詢目標元素,時間複雜度為 O(n)。
動態調整大小:

HashMap 是一種動態資料結構,它會根據需要自動調整內部儲存空間的大小。當元素數量增加時,HashMap 會自動擴充套件內部雜湊表的大小,以保持較低的負載因子。這意味著即使儲存大量資料,HashMap 也能保持高效的效能。相比之下,列表的大小通常是固定的,並且在插入大量元素時可能需要重新分配記憶體空間,導致效能下降。
靈活性:

HashMap 可以儲存任意型別的鍵值對,並且允許鍵和值都可以為 null。這使得 HashMap 在處理各種型別的資料時非常靈活。相比之下,列表通常只能儲存一種型別的元素。
適用於大資料集合:

由於 HashMap 的查詢操作效率高,它特別適用於大資料集合中的查詢和檢索操作。在大型資料集合中,使用 HashMap 可以更快地找到所需的資料,而不必遍歷整個資料集合。
鍵值對關係:

HashMap 的儲存方式是鍵值對的形式,這意味著可以更容易地表示鍵和值之間的關係。這對於建模實際問題中的對映關係非常有用,例如字典、快取等。
總的來說,HashMap 在查詢效率、動態調整大小、靈活性和適用於大資料集合等方面都比列表更具優勢,特別是在需要快速查詢和檢索資料的情況下,HashMap 是更好的選擇。
在程式碼關聯使用和處理資訊處我需要多花功夫,例如在這次作業對各裝置的資料處理,我無法正確地對資料進行處理,以至於我無法完成資料的正確輸出,在接下來的學習過程中,我會加強對資料的處理練習

②學會使用正規表示式的好處
模式匹配:正規表示式允許你指定一種模式,用於在文字中匹配符合該模式的字串。這種匹配方式非常靈活,可以匹配特定的字元、字串、字符集合、位置等。

文字搜尋和替換:使用正規表示式可以進行高效的文字搜尋和替換操作。你可以搜尋匹配某個模式的字串,並對其進行替換或其他處理。

資料提取:透過正規表示式,你可以從文字中提取出符合特定模式的資料。這在資料清洗、提取關鍵資訊等任務中非常有用。

資料驗證:正規表示式可以用於驗證輸入資料的格式是否符合預期。例如,你可以使用正規表示式來驗證郵箱地址、電話號碼、日期等格式是否正確。

文字處理:正規表示式可以幫助你對文字進行各種複雜的處理,如分割字串、合併字串、格式化字串等。

程式語言支援:幾乎所有的程式語言都支援正規表示式,因此你可以在各種不同的程式設計環境中使用它們。

簡潔性和可讀性:雖然正規表示式的語法可能看起來有些晦澀,但一旦你熟悉了它,你會發現它可以用非常簡潔和高效的方式來表達複雜的模式,從而使程式碼更加簡潔和可讀。
③使用文字讀入相較於控制檯讀入的好處:
靈活性:文字讀入可以從多種來源讀取資料,不僅限於控制檯輸入。你可以從檔案、網路流、記憶體中的字串等讀取資料,這使得程式更具靈活性。

批次處理:文字讀入使得批次處理資料更容易。你可以一次性讀取大量資料,而無需逐個輸入或等待使用者輸入。

資料預處理:透過文字讀入,你可以在讀取資料之前對資料進行預處理,例如去除空白字元、轉換資料格式等,從而簡化後續的處理過程。

資料重用:讀取的資料可以儲存在檔案中,以便後續重複使用。這在需要多次執行程式或與其他程式共享資料時非常有用。

自動化:文字讀入可以與其他程式自動整合,實現自動化處理和資料交換,而無需人工干預。

測試:使用文字讀入可以更方便地進行單元測試和整合測試,因為你可以事先準備好輸入資料,並在測試中重複使用

在這次迭代作業中,我對自己寫程式碼的能力缺失有了很大認識,接下來的暑假我會努力補上自己的演算法能力和程式設計能力,爭取在期末取得好成績和下學期寫好Java的課設。
本校的老師工作十分到位,在遇見難題時老師會積極解答,讓我學習Java更加有信心。