首先
一、Map結構的理解:
Map中的key:無序的、不可重複的,使用Set存儲所有的key。
Map中的value:無序的、可重複的,使用Collection存儲所有的value。
一個鍵值對:key-value構成了一個Entry對象。 Map中的entry:無序的、不可重複的,使用Set存儲所有的entry
二、Map遍歷的操作方法:
Set keySet():返回所有key構成的Set集合
Collection values():返回所有value構成的Collection集合
Set entrySet():返回所有key-value對構成的Set集合
@Test
public void test5(){
Map map = new HashMap();
map.put("AA",123);
map.put(45,1234);
map.put("BB",56);
//遍歷所有的key集:keySet()
Set set = map.keySet();
Iterator iterator = set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println();
//遍歷所有的value集:values()
Collection values = map.values();
for(Object obj : values){
System.out.println(obj);
}
System.out.println();
//遍歷所有的key-value
//方式一:entrySet()
Set entrySet = map.entrySet();
Iterator iterator1 = entrySet.iterator();
while (iterator1.hasNext()){
Object obj = iterator1.next();
//entrySet集合中的元素都是entry
Map.Entry entry = (Map.Entry) obj;
System.out.println(entry.getKey() + "---->" + entry.getValue());
}
System.out.println();
//方式二:
Set keySet = map.keySet();
Iterator iterator2 = keySet.iterator();
while(iterator2.hasNext()){
Object key = iterator2.next();
Object value = map.get(key);
System.out.println(key + "=====" + value);
}
}
三,Map中的基礎方法增刪改查:
添加、刪除、修改操作:
Object put(Object key,Object value):將指定key-value添加到(或修改)當前map對象中
void putAll(Map m):將m中的所有key-value對存放到當前map中
Object remove(Object key):移除指定key的key-value對,並返回value
void clear():清空當前map中的所有數據
@Test
public void test3(){
Map map = new HashMap();
//添加
map.put("AA",123);
map.put(45,123);
map.put("BB",56);
//修改
map.put("AA",87);
System.out.println(map);
Map map1 = new HashMap();
map1.put("CC",123);
map1.put("DD",123);
map.putAll(map1);
System.out.println(map);
//remove(Object key)
Object value = map.remove("CC");
System.out.println(value);
System.out.println(map);
//clear()
map.clear();//與map = null操作不同
System.out.println(map.size());
System.out.println(map);
}
元素查詢的操作:
Object get(Object key):獲取指定key對應的value
boolean containsKey(Object key):是否包含指定的key
boolean containsValue(Object value):是否包含指定的value
int size():返回map中key-value對的個數
boolean isEmpty():判斷當前map是否爲空
boolean equals(Object obj):判斷當前map和參數對象obj是否相等
@Test
public void test4(){
Map map = new HashMap();
map.put("AA",123);
map.put(45,123);
map.put("BB",56);
// Object get(Object key)
System.out.println(map.get(45));
//containsKey(Object key)
boolean isExist = map.containsKey("BB");
System.out.println(isExist);
isExist = map.containsValue(123);
System.out.println(isExist);
map.clear();
System.out.println(map.isEmpty());
}
四、Map的實現類的結構:
* |----Map:雙列數據,存儲key-value對的數據 ---類似於高中的函數:y = f(x)
* |----HashMap:作爲Map的主要實現類;線程不安全的,效率高;存儲null的key和value
* |----LinkedHashMap:保證在遍歷map元素時,可以按照添加的順序實現遍歷。
* 原因:在原有的HashMap底層結構基礎上,添加了一對指針,指向前一個和後一個元素。
* 對於頻繁的遍歷操作,此類執行效率高於HashMap。
* |----TreeMap:保證按照添加的key-value對進行排序,實現排序遍歷。此時考慮key的自然排序或定製排序
* 底層使用紅黑樹
* |----Hashtable:作爲古老的實現類;線程安全的,效率低;不能存儲null的key和value
* |----Properties:常用來處理配置文件。key和value都是String類型