Map接口是在 java.util 包下的一个接口。他的形式是 public interface Map<K, V> 。其中K是键,V是值。

Map接口就是用来储存一个将键映射到值的对象。在映射中不能包含重复的键,每个键最多只能映射到一个值。

也就是说,Map集合中的元素是成对存在的,所以也被称为双列集合。

Map集合常用的实现类

HashMap

HashMap应该算Map中最重要的实现类了。它是基于哈希表的Map接口的实现类。HashMap是允许使用null值和null键的,另外,它是非同步的。
HashMap集合是一个无序的集合,这意味着它存储和取出元素的顺序可能不一致。

HashMap的底层实现:
JDk1.8之前:数组+单向链表。
JDK1.8之后:数组+单向链表/红黑树(链表的长度超过8)——可以用来提高查询的速度。


HashMap也有个子类是LinkedHashMap。它是基于哈希表和链表实现的。它是一个有序的集合

LinkedhashMap的底层实现:
哈希表+链表。——>这样就能实现有序了,可以保证迭代的顺序。

Map接口中的常用方法

  • public V put(K key, V value)** **
    • 把指定的键和指定的值添加到集合中。值得注意的是,如果K是一个新键,那么这里返回的是null。如果K是重复的,那么返回的被替换的那个V值。
  • public V get(Object key)
    • 返回指定键所映射的值,如果该映射中不包含该键的映射关系,返回null。
  • public V remove(Object key)
    • 如果key存在,将将其从此映射中移除,返回被删除的值。不存在的话就返回null。
  • public boolean containsKey(Object key)** **
    • 如果此映射包含指定键的映射关系,就返回true。
  • public boolean containsValue(Object value)
    • 如果此映射将一个或多个键映射到指定值,就返回true。

Map集合遍历的方式

keySet( )方法

该方法就是把Map集合中所有的key取出来存储到Set集合中。

这种方法就是通过键找值的方式来遍历Map集合。
实现步骤:
1、使用keySet( )方法将所有的key取出来存储到一个Set集合中。
2、遍历Set集合,获取到每一个key。
3、通过get(key)方法来找到value。

  1. public class keySetDemo{
  2. public static void main(String[] args){
  3. //1.先创建一个map对象
  4. Map<String, Integer> map = new HashMap<>();
  5. map.put("小红", 1);
  6. map.put("小明", 3);
  7. map.put("小杰", 5);
  8. //2.使用keySet()方法取出所有的key
  9. Set<String> set = map.keySet();
  10. //3.遍历Set集合,获取每一个key
  11. //使用迭代器遍历集合
  12. Iterator<String> it = set.iterator();
  13. while(it.hasNext()){
  14. String key = it.next();
  15. //通过Map集合的get()方法,来获取value值
  16. Integer value = map.get(key);
  17. System.out.println(key + "=" + value);
  18. }
  19. //使用增强for来遍历集合
  20. for(String key : set){
  21. //通过Map集合的get()方法,来获取value值
  22. Integer value = map.get(key);
  23. System.out.println(key + "=" + value);
  24. }
  25. }
  26. }

entrySet( )方法

返回该映射中Entry对象的Set集合。

在Map里面有个内部接口叫 Map.Entry<K, V>
Entry接口的作用:
当Map集合一创建的时候,就会在Map集合中创建一个Entry对象,用来记录键与值的映射关系

实现步骤:
1、使用entrySet方法,取出多个Entry对象,存储到Set集合中。
2、遍历Set集合,获取每一个Entry对象。
3、使用Entry对象中的getKey()方法和getValue()方法来获取键与值。

  1. public class EntryDemo{
  2. public static void main(String[] args){
  3. //1.先创建一个map对象
  4. Map<String, Integer> map = new HashMap<>();
  5. map.put("小红", 1);
  6. map.put("小明", 3);
  7. map.put("小杰", 5);
  8. //2.使用entrySet方法来获取Entry对象
  9. Set<Map.Entry<String, Integer>> set = map.entrySet();
  10. //3.遍历Set集合
  11. //使用迭代器遍历Set集合
  12. Iterator<Map.Entry<String, Integer>> = set.iterator();
  13. while(it.hasNext()){
  14. Map.Entry<String, Integer> entry = it.next();
  15. //4.使用Entry对象中的getKey()方法和getValue()方法来获取键与值。
  16. String key = entry.getkey();
  17. Integer value = entry.getValue();
  18. System.out.println(key + "=" + value);
  19. }
  20. //使用增强for来遍历
  21. for(Map.Entry<Stirng, Integer> entry : set){
  22. //4.使用Entry对象中的getKey()方法和getValue()方法来获取键与值。
  23. String key = entry.getkey();
  24. Integer value = entry.getValue();
  25. System.out.println(key + "=" + value);
  26. }
  27. }