泛型
泛型使周遊時不需要強制轉換,幫助建立類型安全的集合。
複制
通過remove了解“引用”
Collections類都有個remove方法:将對象從容器中移除。
但并非删除該對象,移除之後,該對象依舊還在。因為容器存放的時該對象的引用位址,移除的隻是位址,實際上對象本身還在記憶體中。
“除了基本類型,都是引用資料類型,引用資料類型隻是引用位址,而非該對象本身”
總結
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcuUzN4MGZkRzNiBjNxYmZwYjYzETN2YWYyMTOhJjMxUGNvwlN1kDNwcjNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
1.Collection接口:
- 1.List的元素有順序,可重複,包括:
- a)ArrayList:查詢效率高,增删效率低,線程不安全
- b)LinkedList:查詢效率低,增删效率高,線程不安全
- c)Vector:ArrayList的線程安全版,效率低
- 2.Set的元素無順序,不可重複,包括:
- a)HashSet:查詢、增删效率高
- b)TreeSet:用TreeMap的Key實作的,内部需要對存儲的元素進行排序,是以,對應的類需要實作Comparable接口(編寫比較邏輯),這樣才能根據compareTo()方法比較對象之間的大小,才能進行内部排序。
2. Map
- Map,key-value,key不可重複,value可以,包括
- a)HashMap:最常用,效率最高
- b)TreeMap:自動按照key升序排列
3. 操作
- 使用Iterator周遊容器
- 類 java.util.Collections 提供了對Set、List、Map操作的方法(排序,填充,查找,打亂等)
重寫equals、hashCode方法(重點)
- 如下情況,(可能)需要重寫equals/hashCode
- a)要将自定義的對象放入HashSet中處理
- b)要将自定義的對象作為HashMap的key
- c)将自定義對象放入容器中後,可能會調用remove、contains時(實際上使用集合裝對象的時候,約定需要重寫這兩個方法)
原因:
上述三個情況都隐式的涉及到了“對象比較”
- a\b中:HashSet\HashMap的key都是惟一的(是以内部實作就應該存在比較),若放入自定義對象,可能會出現“應該相同的對象但不相同”的情況,比如自定義對象id=1的有兩個(實際業務我們需要他們相同),但他們在HashSet和HashMap的key中并不相同,是以需要重寫equals(id相等就判斷相等)和HashCode(将hash的對象都設定為ID即可保證他們HashCode一緻)。
- c中:remove和contains都涉及到對象的識别(即比較),是以需要重寫equals才能識别。
- 預設的equals比較的是對象記憶體位址,hashCode求的是對象記憶體位址轉換成的數,實際也是記憶體位址。