Map :存儲的是鍵值對,一對一對出現(xiàn)的,要保證鍵的唯一性.
Map常見的三個(gè)子類.1.HashTable 底層是哈希表結(jié)構(gòu),不能存在null的情況.該集合是線程同步的.效率低此類實(shí)現(xiàn)一個(gè)哈希表,該哈希表將鍵映射到相應(yīng)的值。任何非 null 對象都可以用作鍵或值。2.HashMap底層是哈希表數(shù)據(jù)結(jié)構(gòu),允許null值和null鍵,該集合不同步. 效率高3.TreeMap 底層是二叉樹結(jié)構(gòu), 線程不同步,具備排序的特點(diǎn).可以給Map集合中的鍵排序.與Set很像,Set集合的底層就是使用了Map集合方法.
Map其共性方法有:
1.添加 put() putAll()2.刪除 clear(); remove();3.判斷 containsValue(Object value) containsKey(Object key) isEmpty();4.獲取 get(); size(); values();
基本共性方法代碼演示:
import java.util.*;class MapDemo{ public static void main(String [] args) { Map<String,String> map = new HashMap<String,String>(); //Hash無序的. //添加元素,添加了相同的鍵,后添加的值會將原先的鍵對應(yīng)的值替換掉.put方法會返回原先被覆蓋的值. sop("Put :"+map.put("01","zhangsan01")); sop("Put :"+map.put("01","wangwu")); map.put("02","zhangsan02"); map.put("03","zhangsan03"); //判斷是否包含 sop("containsKey : zhangsan01 "+"------"+map.containsKey("01")); //sop("remove : "+map.remove("03")); //找尋鍵,并打印出其對應(yīng)的值: zhangsan03 //獲取 sop("get : "+map.get("02")); map.put("04",null); sop("get : "+map.get("04")); //可以通過個(gè)get方法的返回值來判斷一個(gè) 鍵 是否存在. 通過返回null來判斷. //獲取Map集合中的所有值 Collection<String> coll = map.values(); sop(coll); sop(map); } public static void sop(Object obj) { System.out.PRintln(obj); } }
Map的重點(diǎn)方法: entrySet() KeySet()這兩種方法就是Map集合取出元素的方式:
Map集合兩種取出方式:
1.Set<k> keySet 將Map中所有的鍵存入到Set集合.Set具備迭代器,可以用迭代取出所有的鍵.在根據(jù)get方法,獲取每個(gè)鍵所對應(yīng)的值.Map集合取出原理:轉(zhuǎn)成Set集合.在通過迭代器取出.
2.Set<Map.Entry<k,v>> entrySet
將map集合中的 映射關(guān)系 存入到Set集合中,這個(gè)關(guān)系的數(shù)據(jù)類型是 : Map.Entry
其中Entry其實(shí)是一個(gè)內(nèi)部接口.定義在map接口里面
格式如下:interface Map{ public static interface Entry { public static void getValue(); public static void getKey(); }}class HashMap implements Map{ class Hash implements Map.Entry { public Object getValue(){}; public Object getKey(){}; }}
兩種取出方式的代碼演練:
/*Map集合兩種取出方式: 1.Set<k> keySet 將map中所有的鍵存入到Set集合.Set具備迭代器,可以用迭代取出所有的鍵. 在根據(jù)get方法,獲取每個(gè)鍵鎖對應(yīng)的值. Map集合取出原理:轉(zhuǎn)成Set集合.在通過迭代器取出. 2.Set<Map.Entry<k,v>> entrySet ,將map集合中的 映射關(guān)系 存入到Set集合中,這個(gè)關(guān)系的數(shù)據(jù)類型是 : Map.Entry Entry其實(shí)是一個(gè)內(nèi)部接口.定義在map接口里面 interface Map { public static interface Entry { public static void getValue(); public static void getKey(); } } class HashMap implements Map { class Hash implements Map.Entry { public Object getValue(){}; public Object getKey(){}; } } */import java.util.*;class MapDemo2{ public static void main(String [] args) { Map<String,String> map = new HashMap<String,String>(); map.put("01","zhangsan01"); map.put("02","zhangsan02"); map.put("03","zhangsan03"); map.put("04","zhangsan04"); //將map集合中的 映射關(guān)系 取出. Set<Map.Entry<String,String>> mapEntry = map.entrySet(); Iterator<Map.Entry<String,String>> it = mapEntry.iterator(); while(it.hasNext()) { Map.Entry<String,String> me = it.next(); String key = me.getKey(); String value = me.getValue(); sop("Key :"+key+"Value :"+value); } /* //獲取Map集合的所有鍵,并放在Set集合中. 獲取方法: keySet(); Set<String> keySet = map.keySet(); //迭代取出所有的鍵. Iterator<String> it = keySet.iterator(); while(it.hasNext()) { String key = it.next(); //有了鍵以后可以通過Map集合的get(key)方法獲取其對應(yīng)的值. String value = map.get(key); sop("Key :"+key+" Value :"+value); } */ } public static void sop(Object obj) { System.out.println(obj); } }
相關(guān)練習(xí):
/*練習(xí): 每一個(gè)學(xué)生都有對應(yīng)的歸屬地。 鍵值對: 學(xué)生Student為鍵,地址類型String值。 學(xué)生屬性:姓名,年齡。 注意:姓名和年齡相同的視為同一個(gè)學(xué)生。 保證學(xué)生的唯一性。 1.描述學(xué)生。 2.定義map容器。將學(xué)生作為鍵,地址作為值。存入。 3.獲取map集合中的元素。*/import java.util.*;class MapTest{ public static void main(String [] args) { Map<Student,String> map = new HashMap<Student,String>(); map.put(new Student("zhangsan01",21),"beijing"); map.put(new Student("zhangsan02",22),"shanghai"); map.put(new Student("zhangsan03",23),"guangzhou"); map.put(new Student("zhangsan04",24),"shenzhen"); //第一種取出方式:keySet Set<Student> keySet = map.keySet(); Iterator<Student> it = keySet.iterator(); while(it.hasNext()) { Student stu = it.next(); String addr = map.get(stu); sop("第一種取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", address : "+addr); } sop("-----------------------------------------"); //第二種取出方式:entrySet Set<Map.Entry<Student,String>> entrySet = map.entrySet(); Iterator<Map.Entry<Student,String>> iter = entrySet.iterator(); while(iter.hasNext()) { Map.Entry<Student,String> me = iter.next(); Student stu = me.getKey(); String addr = me.getValue(); sop("第二種取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", adresss :"+addr); } } public static void sop(Object obj) { System.out.println(obj); } }class Student implements Comparable<Student>{ private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } public int compareTo(Student s) { if(!(s instanceof Student)) throw new ClassCastException("類型匹配失敗"); int num = new Integer(this.age).compareTo(new Integer(s.age)); if(num == 0) { return this.name.compareTo(s.name); } return num; } public int hashCode() { return name.hashCode()+age*17; } public boolean equals(Object obj) { if(!(obj instanceof Student)) throw new ClassCastException("類型匹配失敗"); Student stu = (Student)obj; return this.getName().equals(stu.getName()) && this.age==stu.age; } public void setName(String name) { this.name = name; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public int getAge() { return age; } }
新聞熱點(diǎn)
疑難解答
圖片精選