繼上次的ArrayList和 LinkedList之後,接著來介紹Map、Set啦
由 Key、Value對應組成的資料結構
Key Value
US United
es spain
zw zimbab
可以想成 商品(Key)和商品條碼(Value)的概念
Key、Value可以為任一類型
其中Hashtable、TreeMap、ConcurrenHashMap不允許null為key
JAVA內建的實作有下面這幾種
HashMap(較常用)
LinkedHashMap
TreeMap
Hashtable
ConcurrenHashMap
再深入Map之前,先來瞭解Hash
這邊先知道概念~
Hash是一個概念,不是一個固定的方法
計算機科學中的一種技術,將數據通過特定的演算法轉換成一個固定大小的值(成為哈希值或散列值)
假設我有一個值:123455 >
經過hash function >
變成一個固定大小的值:drjhilDAGE33fl34
特點:
單向操作,無法還原
固定大小是由hash function來決定
HashMap是MAP界面的的實作
特點
無序(HashMap的元素和LinkedList一樣,是分散在記憶體,而且是透過Key來尋找在記憶體中的位置)
允許null的鍵和null的值
鍵唯一(每個Key都是唯一(只有一個,不能重複),如果重複,插入的值的會覆蓋原本的
非同步
Map<Type, object> map = new HashMap<使用泛型,不定義型態,在建立物件的時候,由該物件去決定型態>();
Map<String, String> map = new HashMap<>();
map.put("1", "Google");//用 .put 添加元素
map.put("2", "Runoob");
map.put("3", "Taobao");
map.get(3);//取得key為3的值=>Taobao
map.remove(3); //刪除key為3的值=>Taobao
map.clear();//刪除所有=> {}
HashSet<String> set = new HashSet<String>();
set.add("Google"); //HashSet 使用 add添加元素,和HashMap不一樣
set.add("Runoob");
set.add("Taobao");
set.add("Zhihu");
set.add("Runoob"); // HashSet不允許重複,因此重复的元素不会被添加
// HashMap則是重複的值會複寫原本的值
set.remove("Runoob"); //刪除"Runoob" // HashSet刪除是直接指定元素刪除
set.clear();//刪除所有=> {}