Java基礎——常用物件API(四)Map集合
阿新 • • 發佈:2019-01-10
一、集合特點和常用方法
1.特點
一次新增一對元素,因此也稱作雙列集合。(相較下,Set稱為單列集合)
要保證鍵的唯一性。
2.功能
2.1.新增
value put(key,value);//返回前一個和key關聯的值,如果沒有返回null。
2.2.刪除
void clear();//清空map集合。
value remove(key);//根據指定的key翻出這個鍵值對。
2.3.判斷
boolean containsKey(key):
boolean containsValue(value):
boolean isEmpty();
2.4.獲取
value get(key);//通過鍵獲取值,如果沒有該鍵返回null。
//注:當然可以通過返回null,來判斷是否包含指定鍵。
int size(); //獲取鍵值對的個數。
使用的小例子,裡面大註釋的程式碼也可以用來試一下:
public class MapDemo { public static void main(String[] args) { Map<Integer,String> map = new HashMap<Integer,String>(); method_2(map); } public static void method_2(Map<Integer,String> map){ map.put(8,"zhaoliu"); map.put(2,"zhaoliu"); map.put(7,"xiaoqiang"); map.put(6,"wangcai"); Collection<String> values = map.values(); Iterator<String> it2 = values.iterator(); while(it2.hasNext()){ System.out.println(it2.next()); } /* * 通過Map轉成set就可以迭代。 * 找到了另一個方法。entrySet。 * 該方法將鍵和值的對映關係作為物件儲存到了Set集合中,而這個對映關係的型別就是Map.Entry型別(結婚證) * * */ Set<Map.Entry<Integer, String>> entrySet = map.entrySet(); Iterator<Map.Entry<Integer, String>> it = entrySet.iterator(); while(it.hasNext()){ Map.Entry<Integer, String> me = it.next(); Integer key = me.getKey(); String value = me.getValue(); System.out.println(key+"::::"+value); } //取出map中的所有元素。 //原理,通過keySet方法獲取map中所有的鍵所在的Set集合,在通過Set的迭代器獲取到每一個鍵, //在對每一個鍵通過map集合的get方法獲取其對應的值即可。 /* Set<Integer> keySet = map.keySet(); Iterator<Integer> it = keySet.iterator(); while(it.hasNext()){ Integer key = it.next(); String value = map.get(key); System.out.println(key+":"+value); } */ } public static void method(Map<Integer,String> map){//學號和姓名 // 新增元素。 System.out.println(map.put(8, "wangcai"));//null System.out.println(map.put(8, "xiaoqiang"));//wangcai 存相同鍵,值會覆蓋。 map.put(2,"zhangsan"); map.put(7,"zhaoliu"); //刪除。 // System.out.println("remove:"+map.remove(2)); //判斷。 // System.out.println("containskey:"+map.containsKey(7)); //獲取。 System.out.println("get:"+map.get(6)); System.out.println(map); Outer.Inner.show(); } }
接著說方法:
2.5.利用keySet遍歷
//取出map中的所有元素。 //原理,通過keySet方法獲取map中所有的鍵所在的Set集合,再通過Set的迭代器獲取到每一個鍵, //再對每一個鍵通過map集合的get方法獲取其對應的值即可。 Set<Integer> keySet = map.keySet();//獲取鍵的集合 Iterator<Integer> it = keySet.iterator();//獲取集合迭代器 //遍歷 while(it.hasNext()){ Integer key = it.next(); String value = map.get(key); System.out.println(key+":"+value); }
2.6.利用entrySet遍歷
//該方法將鍵和值的對映關係作為物件儲存到了Set集合中,而這個對映關係的型別就是Map.Entry型別(結婚證)
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();
while(it.hasNext()){
Map.Entry<Integer, String> me = it.next();
Integer key = me.getKey();
String value = me.getValue();
System.out.println(key+"::::"+value);
}
2.7.values來遍歷值
Collection<String> values = map.values();
Iterator<String> it2 = values.iterator();
while(it2.hasNext()){
System.out.println(it2.next());
}
二、Map常見子類
1.Hashtable
內部結構是雜湊表,是同步的。不允許null作為鍵,null作為值。
他有個小弟叫做Properties,用來儲存鍵值對型的配置檔案的資訊。可以和IO技術相結合發揮最大作用。
2.HashMap
內部結構是雜湊表,不是同步的。允許null作為鍵,null作為值。
3.TreeMap
內部結構是二叉樹,不是同步的。可以對Map集合中的鍵進行排序。
使用小例子:
public static void main(String[] args) {
/*
* 將學生物件和學生的歸屬地通過鍵與值儲存到map集合中。
*
*/
HashMap<Student,String> hm = new HashMap<Student,String>();//student是個外部類
hm.put(new Student("lisi",38),"北京");
hm.put(new Student("zhaoliu",24),"上海");
hm.put(new Student("xiaoqiang",31),"瀋陽");
hm.put(new Student("wangcai",28),"大連");
hm.put(new Student("zhaoliu",24),"鐵嶺");//student判斷相同需要覆寫hashCode和equals方法
// Set<Student> keySet = hm.keySet();
// Iterator<Student> it = keySet.iterator();
Iterator<Student> it = hm.keySet().iterator();
while(it.hasNext()){
Student key = it.next();
String value = hm.get(key);
System.out.println(key.getName()+":"+key.getAge()+"---"+value);
}
}