14.5 Map集合

1、概述
  Map集合没有继承Collection接口,其提供的 key到value的映射。Map中不能包含相同的key,每个key只能映射到一个value。key还决定了存储对象在映射中的存储位置,但不是由key对象本身决定的,而是通过一种“散列技术”进行处理,产生一个散列码的整数值。散列码通常用做一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象在映射中的存储位置。Map集合包括Map接口以及Map接口的所有实现类。

2、Map接口
  a、Map集合中允许值对象是null,而且没有个数限制。例如,可通过“map.put("05",null;)”语句向集合中添加对象。
  b、Map接口中的常用方法如下:

方法 功能描述
put(K key, V value) 向集合中添加指定的key与value的映射关系
containsKey(Object key) 如果此映射包含指定的key的映射关系,则返回true
containsValue(Object value) 如果此映射将一个或多个key映射到指定值,则返回true
get(Object key) 如果存在指定的key对象,则返回该对象对应的值,否则返回null
keySet() 返回该集合中的所有key对象形成的Set集合
values() 返回该集合中所有之对象形成的Collection集合
 1 package com.lzw;
 2 
 3 import java.util.*;
 4 
 5 public class UpdateStu {
 6     public static void main(String[] args) {
 7         Map<String,String> map = new HashMap<>();    //创建Map实例
 8         map.put("01", "李同学");
 9         map.put("02", "张同学");
10         map.put("03", "王同学");
11         map.put("04", "孙同学");
12         
13         Set<String> set = map.keySet();        //构建Map集合中所有的key对象集合
14         Iterator<String> it = set.iterator();    //创建集合迭代器
15         System.out.println("key集合中的元素:");
16         while(it.hasNext()) {
17             System.out.println(it.next());
18         }
19         Collection<String> coll = map.values();        //构建Map集合中所有的values值的集合
20         it = coll.iterator();
21         System.out.println("values集合中的所有元素:");
22         while(it.hasNext()) {
23             System.out.println(it.next());
24         }
25     }
26 }
View Code

3、Map接口的实现类
  a、Map接口通常的实现类有HashMap和TreeMap。建议使用HashMap类实现Map集合,因为由HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行快速查找;而TreeMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定的顺序,应该使用TreeMap类实现Map集合。
  b、(1):HashMap类是基础哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。此类不保证映射顺序,特别是他不保证该顺序恒久不变。
     (2):TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但在添加、删除、定位映射关系时,TreeMap类比HashMap类性能稍差。由于TreeMap类实现的Map集合中的映射关系时根据键对象按照一定的书序排列的,因此不允许键对象是null。

 1 package com.lzw;
 2 
 3 public class Emp {
 4     private String e_id;
 5     private String e_name;
 6     public Emp( String e_id,String e_name) {
 7         this.e_id = e_id;
 8         this.e_name = e_name;
 9     }
10     public String getE_id() {
11         return e_id;
12     }
13     public void setE_id(String e_id) {
14         this.e_id = e_id;
15     }
16     public String getE_name() {
17         return e_name;
18     }
19     public void setE_name(String e_name) {
20         this.e_name = e_name;
21     }
22     
23 }
View Code
 1 package com.lzw;
 2 
 3 import java.util.*;
 4 
 5 public class Text {
 6     public static void main(String[] args) {
 7         Map<String, String> map = new TreeMap<>();        //由HashMap实现的Map对象
 8         Emp emp = new Emp("001", "张三");        //创建Emp对象
 9         Emp emp2 = new Emp("005", "李四");
10         Emp emp3 = new Emp("004", "王一");
11         Emp emp4 = new Emp("010", "王一");
12         Emp emp5 = new Emp("015", "王一");
13         map.put(emp.getE_id(), emp.getE_name());        //将对象添加到集合中
14         map.put(emp2.getE_id(), emp2.getE_name());
15         map.put(emp3.getE_id(), emp3.getE_name());
16         map.put(emp4.getE_id(), emp4.getE_name());
17         map.put(emp5.getE_id(), emp5.getE_name());
18         
19         Set<String> set = map.keySet(); //获取Map集合中的key对象集合
20         Iterator<String> it = set.iterator();
21         System.out.println("Hash类实现的Map集合,无序:");
22         while(it.hasNext()) {
23             String str = (String)it.next();
24             String name = (String)map.get(str);
25             System.out.println(str + "  " + name);
26         }
27         
28         TreeMap<String,String> treemap = new TreeMap<>();    //创建TreeMap集合对象
29         treemap.putAll(map);    //向集合中添加对象
30         Iterator<String> iter = treemap.keySet().iterator();
31         System.out.println("TreeMap类实现的Map集合,键对象升序:");
32         while(iter.hasNext()){         //遍历TreeMap集合对象
33             String str = (String)iter.next();
34             String name = (String)treemap.get(str);
35             System.out.println(str + "  "  + name);
36         }
37     }
38 }
View Code

原文地址:https://www.cnblogs.com/studycode/p/9536867.html