Java類集框架(五):偶物件儲存:Map介面
阿新 • • 發佈:2018-12-08
Map集合可以儲存一對關聯資料(按照“key = value”的形式)。
Map介面的常用方法
方法 | 型別 | 描述 |
---|---|---|
public V put(K key, V value) |
普通 | 向集合中儲存資料 |
public V get(Object key) |
普通 | 根據key查詢對應的value資料 |
public Set<Map.Entry<K, V>> entrySet() |
普通 | 將Map集合轉化為Set集合 |
public Set<K> keySet() |
普通 | 取出全部的key |
Map介面的兩個常用子類:HashMap、Hashtable。
HashMap子類的使用
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<String, Integer>();
//出現key重複的情況,就會使用新的資料替換已有資料。
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
map.put(null, 5);
map.put("f", null);
System.out.println(map);
}
}
//程式的執行結果為:{null=5, a=1, b=2, c=3, d=4, f=null}
上例利用HashMap實現了Map集合最基礎的資料儲存操作。通過此例可以看出Map如下特點:
- 使用HashMap定義的Map集合是無序存放的;
- 如果發現了重複的key會進行覆蓋,使用新的內容替換舊的內容;
- 使用HashMap子類儲存資料時key和value均可取null。
PS:Map與Collection的區別
Map和Collection都可以儲存動態長短的資料,其本質的區別在於使用的環境。
- Collection :利用Iterator介面輸出資料。
- Map:實現用過key查詢value的字典功能。
HashMap與HashTable的區別:
區別點 | HashMap | HashTable |
---|---|---|
效能 | 非同步處理 | 同步處理 |
資料安全 | 非執行緒安全 | 執行緒安全 |
設定null | 允許key或value內容為null | 不允許設定null |
利用Iterator輸出Map集合
由此可知,Collection集合儲存資料時所有物件是直接儲存的,而Map集合儲存資料時,所儲存的key和value會自動包裝成為Map.Entry介面物件。如果利用Iterator進行迭代,那麼next()方法所返回的資料是一個Map.Entry介面物件,如下定義。
public static interface Map.Entry<K, V>{}
該介面定義的常用方法如下:
方法 | 型別 | 描述 |
---|---|---|
public K getKey() |
普通 | 取得資料中的key |
public V getValue() |
普通 | 取得資料中的value |
public V setValue() |
普通 | 修改資料中的value |
Map介面中定義了一個方法:public Set<Map.Entry<K, V>> entrySet()
使用此方法輸出Map集合的操作如下:
- 利用entrySet()方法將Map介面資料中的資料轉換為Set介面例項進行儲存。
- 利用Set介面中的iterator()方法將Set集合轉換為Iterator介面例項。
- 利用Iterator介面進行迭代輸出。
利用Iterator實現Map介面輸出
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class TestOutput {
public static void main(String[] args) {
Map<String, Integer> map = new HashMap<>();
map.put("a", 1);
map.put("b", 2);
map.put("c", 3);
map.put("d", 4);
// 將Map集合轉換為Set集合,以使用itertor()方法,注意泛型統一
Set<Map.Entry<String, Integer>> set = map.entrySet();
//取得Iterator介面例項
Iterator<Map.Entry<String, Integer>> iterator = set.iterator();
while (iterator.hasNext()) {
//每一次迭代取得的都是Map.Entry介面例項,以進行key和value的分離
Map.Entry<String, Integer> me = iterator.next();
System.out.println(me.getKey() + "--->>" + me.getValue());
}
}
}
自定義Map集合的key型別
作為key的自定義的類必須覆寫hasCode()和equals()兩個方法,以確定元素是否重複。