1.5 Map集合:HashMap 和TreeMap 类
Map集合,HashMap,TreeMap
Map 是一種鍵-值對(key-value)集合,Map 集合中的每一個元素都包含一個鍵(key)對象和一個值(value)對象。用于保存具有映射關系的數據。
Map 集合里保存著兩組值,一組值用于保存 Map 里的 key,另外一組值用于保存 Map 里的 value,key 和 value 都可以是任何引用類型的數據。Map 的 key 不允許重復,value 可以重復,即同一個 Map 對象的任何兩個 key 通過 equals 方法比較總是返回 false。
Map 中的 key 和 value 之間存在單向一對一關系,即通過指定的 key,總能找到唯一的、確定的 value。從 Map 中取出數據時,只要給出指定的 key,就可以取出對應的 value。
Map 接口主要有兩個實現類:HashMap 類和 TreeMap 類。其中,HashMap 類按哈希算法來存取鍵對象,而 TreeMap 類可以對鍵對象進行排序。
Map 接口中提供的常用方法如表 1 所示:
| void clear() | 刪除該 Map 對象中的所有 key-value 對。 |
| boolean containsKey(Object key) | 查詢 Map 中是否包含指定的 key,如果包含則返回 true。 |
| boolean containsValue(Object value) | 查詢 Map 中是否包含一個或多個 value,如果包含則返回 true。 |
| V get(Object key) | 返回 Map 集合中指定鍵對象所對應的值。V 表示值的數據類型 |
| V put(K key, V value) | 向 Map 集合中添加鍵-值對,如果當前 Map 中已有一個與該 key 相等的 key-value 對,則新的 key-value 對會覆蓋原來的 key-value 對。 |
| void putAll(Map m) | 將指定 Map 中的 key-value 對復制到本 Map 中。 |
| V remove(Object key) | 從 Map 集合中刪除 key 對應的鍵-值對,返回 key 對應的 value,如果該 key 不存在,則返回 null |
| boolean remove(Object key, Object value) | 這是 Java 8 新增的方法,刪除指定 key、value 所對應的 key-value 對。如果從該 Map 中成功地刪除該 key-value 對,該方法返回 true,否則返回 false。 |
| Set entrySet() | 返回 Map 集合中所有鍵-值對的 Set 集合,此 Set 集合中元素的數據類型為 Map.Entry |
| Set keySet() | 返回 Map 集合中所有鍵對象的 Set 集合 |
| boolean isEmpty() | 查詢該 Map 是否為空(即不包含任何 key-value 對),如果為空則返回 true。 |
| int size() | 返回該 Map 里 key-value 對的個數 |
| Collection values() | 返回該 Map 里所有 value 組成的 Collection |
Map 集合最典型的用法就是成對地添加、刪除 key-value 對,接下來即可判斷該 Map 中是否包含指定 key,也可以通過 Map 提供的 keySet() 方法獲取所有 key 組成的集合,進而遍歷 Map 中所有的 key-value 對。下面程序示范了 Map 的基本功能。
例 1
每名學生都有屬于自己的唯一編號,即學號。在畢業時需要將該學生的信息從系統中移除。
下面編寫 Java 程序,使用 HashMap 來存儲學生信息,其鍵為學生學號,值為姓名。畢業時,需要用戶輸入學生的學號,并根據學號進行刪除操作。具體的實現代碼如下:
import java.util.HashMap; import java.util.Iterator; import java.util.Scanner;public class Test {public static void main(String[] args) {HashMap users=new HashMap();//將學生信息鍵值對存儲到Map中users.put("1", "李一");users.put("2", "李二");users.put("3", "李三");users.put("4", "李四");users.put("5", "李五");users.put("6", "李六");System.out.println("+++++++++學生列表++++++++++");//keySet()返回 Map 集合中所有鍵對象的 Set 集合Iterator it=users.keySet().iterator();while(it.hasNext()){//遍歷MapObject key=it.next();//V get(Object key):返回 Map 集合中指定鍵對象所對應的值。V 表示值的數據類型Object val=users.get(key);System.out.println("學號:"+key+" 姓名:"+val);}Scanner input=new Scanner(System.in);System.out.println("請輸入要刪除的學號:");int num=input.nextInt();//containsKey():查詢 Map 中是否包含指定的 key,如果包含則返回 true。//判斷是否包含指定鍵if(users.containsKey(String.valueOf(num))){users.remove(String.valueOf(num));//包含就刪除}else{System.out.println("該學生不存在!");}System.out.println("+++++++++++學生列表+++++++++++");//keySet():返回 Map 集合中所有鍵對象的 Set 集合it=users.keySet().iterator();while(it.hasNext()){//boolean hasNext():判斷集合是否還有元素可以遍歷。//E next():返回迭代的下一個元素Object key=it.next();Object val=users.get(key);System.out.println("學號:"+key+" 姓名:"+val);}} }在該程序中,兩次使用 while 循環遍歷 HashMap 集合。當有學生畢業時,用戶需要輸入該學生的學號,根據學號使用 HashMap 類的 remove() 方法將對應的元素刪除。程序運行結果如下所示。
+++++++++學生列表++++++++++ 學號:1 姓名:李一 學號:2 姓名:李二 學號:3 姓名:李三 學號:4 姓名:李四 學號:5 姓名:李五 學號:6 姓名:李六 請輸入要刪除的學號: 2 +++++++++++學生列表+++++++++++ 學號:1 姓名:李一 學號:3 姓名:李三 學號:4 姓名:李四 學號:5 姓名:李五 學號:6 姓名:李六注意:TreeMap 類的使用方法與 HashMap 類相同,唯一不同的是 TreeMap 類可以對鍵對象進行排序,這里不再贅述。
總結
以上是生活随笔為你收集整理的1.5 Map集合:HashMap 和TreeMap 类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.4 Set集合:HashSet和Tr
- 下一篇: 1.7 Java 8中Map新增的方法