記錄一下let,const,var的區別
阿新 • • 發佈:2021-11-09
供自己鞏固集合知識時寫的筆記,不會對所有的內容都介紹
我們知道,Map
用於儲存key-value的對映,對於充當key的物件,是不能重複的,並且,不但需要正確覆寫equals()
方法,還要正確覆寫hashCode()
方法。
如果我們只需要儲存不重複的key,並不需要儲存對映的value,那麼就可以使用Set
。
Set
用於儲存不重複的元素集合,它主要提供以下幾個方法:
- 將元素新增進
Set<E>
:boolean add(E e)
- 將元素從
Set<E>
刪除:boolean remove(Object e)
- 判斷是否包含元素:
boolean contains(Object e)
Set
實際上相當於只儲存key、不儲存value的Map
。我們經常用Set
用於去除重複元素。
因為放入Set
的元素和Map
的key類似,都要正確實現equals()
和hashCode()
方法,否則該元素無法正確地放入Set
最常用的Set
實現類是HashSet
,實際上,HashSet
僅僅是對HashMap
的一個簡單封裝,通過檢視HashSet
的核心程式碼可見:
public class HashSet<E> implements Set<E> { // 持有一個HashMap: private HashMap<E, Object> map = new HashMap<>(); // 放入HashMap的value: private static final Object PRESENT = new Object(); public boolean add(E e) { return map.put(e, PRESENT) == null; } public boolean contains(Object o) { return map.containsKey(o); } public boolean remove(Object o) { return map.remove(o) == PRESENT; } }
TreeSet
Set
介面並不保證有序,而SortedSet
介面則保證元素是有序的:
HashSet
是無序的,因為它實現了Set
介面,並沒有實現SortedSet
介面;TreeSet
是有序的,因為它實現了SortedSet
介面。
用一張圖表示:
┌───┐ │Set│ └───┘ ▲ ┌────┴─────┐ │ │ ┌───────┐ ┌─────────┐ │HashSet│ │SortedSet│ └───────┘ └─────────┘ ▲ │ ┌─────────┐ │ TreeSet │ └─────────┘
使用TreeSet
和使用TreeMap
的要求一樣,新增的元素必須正確實現Comparable
介面,如果沒有實現Comparable
介面,那麼建立TreeSet
時必須傳入一個Comparator
物件。