Java封裝CSV常用工具類
阿新 • • 發佈:2021-01-20
Set介面的框架
* |----Collection介面:單列集合,用來儲存一個一個的物件 * |----Set介面:儲存無序的、不可重複的資料 -->高中講的“集合” * |----HashSet:作為Set介面的主要實現類;執行緒不安全的;可以儲存null值 * |----LinkedHashSet:作為HashSet的子類;遍歷其內部資料時,可以按照新增的順序遍歷 * 對於頻繁的遍歷操作,LinkedHashSet效率高於HashSet. * |----TreeSet:可以按照新增物件的指定屬性,進行排序。
特點
1. Set介面中沒有額外定義新的方法,使用的都是Collection中宣告過的方法。 2. 要求:向Set(主要指:HashSet、LinkedHashSet)中新增的資料,其所在的類一定要重寫hashCode()和equals() 要求:重寫的hashCode()和equals()儘可能保持一致性:相等的物件必須具有相等的雜湊碼 重寫兩個方法的小技巧:物件中用作 equals() 方法比較的 Field,都應該用來計算 hashCode 值。 一、Set:儲存無序的、不可重複的資料 以HashSet為例說明: 1. 無序性:不等於隨機性。儲存的資料在底層陣列中並非按照陣列索引的順序新增,而是根據資料的雜湊值決定的。 2. 不可重複性:保證新增的元素按照equals()判斷時,不能返回true.即:相同的元素只能新增一個。 二、新增元素的過程:以HashSet為例: 我們向HashSet中新增元素a,首先呼叫元素a所在類的hashCode()方法,計算元素a的雜湊值, 此雜湊值接著通過某種演算法計算出在HashSet底層陣列中的存放位置(即為:索引位置),判斷 陣列此位置上是否已經有元素: 如果此位置上沒有其他元素,則元素a新增成功。 --->情況1 如果此位置上有其他元素b(或以連結串列形式存在的多個元素),則比較元素a與元素b的hash值: 如果hash值不相同,則元素a新增成功。--->情況2 如果hash值相同,進而需要呼叫元素a所在類的equals()方法: equals()返回true,元素a新增失敗 equals()返回false,則元素a新增成功。--->情況2 對於新增成功的情況2和情況3而言:元素a 與已經存在指定索引位置上資料以連結串列的方式儲存。 jdk 7 :元素a放到陣列中,指向原來的元素。 jdk 8 :原來的元素在陣列中,指向元素a 總結:七上八下 HashSet底層:陣列+連結串列的結構。
LinkedHashSet的使用
LinkedHashSet作為HashSet的子類,在新增資料的同時,每個資料還維護了兩個引用,記錄此資料前一個
資料和後一個數據。
優點:對於頻繁的遍歷操作,LinkedHashSet效率高於HashSet