Map接口的實現(xiàn)類為HashMap炒俱,Map接口定義的集合又稱為查找表奶稠,用于存儲“鍵值對”。Key可以看成Value的索引盒犹,而往往Key是Value的一部分內(nèi)容懂更。
????1)Key、鍵不可以重復急膀,但是保存的value沮协、值可以重復。Map接口有很多實現(xiàn)類卓嫂,有內(nèi)部為hash表實現(xiàn)的HashMap和內(nèi)部為二叉樹鏈表的TreeMap皂股。同樣這樣的數(shù)據(jù)接口在存儲數(shù)據(jù)時,不建議存儲兩種以上的數(shù)據(jù)類型命黔。所以通常我們使用Map集合時呜呐,也會使用泛型來約束存儲數(shù)據(jù)的數(shù)據(jù)類型。
????2)創(chuàng)建Map進行存儲時悍募,這里要約束兩個類型蘑辑,一個是Key鍵類型,一個是Value值的類型坠宴。
????3)HashMap集合中常用的方法:
????????①V put(Key,Value):????將元素以Key-Value形式存入到集合中洋魂,當存儲內(nèi)容相同時,則Key相同,替換Key對應(yīng)的Value值副砍。
????????②V get(Object Key):返回Key鍵對應(yīng)的Value值衔肢,如果不存在,則返回null豁翎;
????????③boolean containsKey(Object Key):判斷集合中是否保存指定的Key角骤。
????????④boolean containsValue(Object value):判斷集合中是否存在指定的value。
????????⑤若指定的Key在HashMap集合中不存在心剥,則返回null邦尊,原則上,我們在集合中獲取元素時优烧,首先要判斷集合中是否存在該元素蝉揍。之后再使用,避免空指針異常出現(xiàn)畦娄。Map在獲取元素時有針對性又沾,集合在獲取元素需要遍歷集合內(nèi)容,而Map不需要熙卡,只需要給他指定的Key就能獲取對應(yīng)的內(nèi)容杖刷。
Map<String,Point>?map?=?new?HashMap<String,Point>()?;
????map.add("san",new?Point(1,2))?;
????map.add("1,2",new?Point(3,4))?;
????Point?p?=?map.get("san")?;:
????System.out.println("鍵="+p.getX()+"值="+p.getY())?;
????//添加同Key不同Value的對象,將Value替換
????map.add("san",new?Point(5,6))?;
????p?=?map.get("san")?;
????System.out.println("鍵="+p.getX()+"值="+p.getY())?;
????//查找集合中不存在Key
????p?=?map.get("si")?;
????System.out.println("Key="+p.getX()+"Value"=p.getY())?;
? 4)遍歷HashMap方式一:獲取所有的key(迭代Key),并根據(jù)key獲取value再膳。從而達到遍歷的效果挺勿。keySet()方法:是HashMap獲取所有Key的方法曲横。該方法可以獲取Map集合中的所有key喂柒,并以Set集合的形式返回。
Map<String,Point>?map?=?new?HashMap<String,Point>()?;
map.add("yi",new?Point("1,2"))?;
map.add("er",new?Point("3,4"))?;
map.add("san",new?Point("5,6"))?;
//因為key在HashMap泛型中規(guī)定了類型為String,所以返回的Set類型也為String,為了更好的使用禾嫉,定義set類型變量也加上泛型
Set<String>?keySet?=?map.keySet()?;
for(String?str:map.keySet()){
????Point?p?=?map.get(key)?;????//通過Key找到value
????System.out.println("key:"+p.getX()+"value:"+p.getY())?;
}
????5)List灾杰,Set,Map三個接口存儲元素時各自的特點:
????????①List熙参。繼承Collection接口艳吠,使用此接口能精確的定位到要插入的位置。用戶能夠通過索引來訪問List集合中的元素孽椰。
????有序昭娩,可以重復。
????????②Set黍匾。繼承Collection接口栏渺,無序,不重復锐涯,元素唯一值磕诊。集合中任意兩個元素都會a.equals(b) = false,Set集合中最少有一個null元素。
????????③Map霎终。沒有繼承Collection接口滞磺,Map提供Key——value映射。