zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    [数据备档]源码用的百家姓的数组,实用
    Linq to Sql 与NHibernate数据库操作性能比较研究 测试程序源码
    【技术备档】在WinCE5.0下实现透明背景按钮(.net C#)
    【技术备档】windows平台下快速配置MySQLPython的方法
    反思一下,我为什么需要这些技术?
    一些软件或组件
    Hibernate 与 Spring 多数据源的配置
    asp.net web路径总结
    Ubuntu 中文编码设置
    根据枚举动态扩充datatable列
  • 原文地址:https://www.cnblogs.com/studycode/p/9536867.html
Copyright © 2011-2022 走看看