【Java基础18_1】Map集合

来源:互联网 发布:白城广逸网络具体位置 编辑:程序博客网 时间:2024/05/30 23:02

引子

  • 班级中有很多学生,有可能出现姓名和年龄也一样的人。如表:
姓名 年龄 张三 20 张三 20


上面的这种情况,有可能是用户输入失误导致插入的数据出现重复,也有可能这两个人只是恰巧同名同姓而已,实际上根本不是同一个人。

  • 此时,单单用姓名无法保证插入数据的唯一性,因此采取以下措施:

    1. 用ID保证
    2. 在1的基础同时用姓名保证
  • Map一个键对应存储的一个值。

Map 与Collection集合的区别

  1. Map集合是双列集合,Collection集合是单列的。
  2. Map集合是靠键来保证元素唯一,Map集合的键相当于Set集合,能够保证元素唯一。值不唯一,Map集合的值相当于Collection集合的List接口。
  3. Map集合保证元素唯一只针对键有效。而Set集合保证元素唯一。
    • 通过查看API,发现 Map 集合是一个接口:
    • 接口 Map<K ,V >
    • K表示键的类型
    • V表示值的类型

将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。

Map与Collection内存原理

基本方法

方法名 功能 V put ( K key , V Value); 将一个键值对添加到集合中
如果没有这个键,就添加到这个集合中并返回null;
如果已经有了这个键,那么就将这个键的值给替换,返回被替换的值。 V remove ( K key ); 根据键删除元素,并返回被删除元素的值。 void clear ( ); 清空集合 boolean containsKey ( Object key); 判断是否包含key键 boolean contiansValue ( Object value); 判断是否包含value值 boolean isEmpty ( ); 判断Map是否为空 int size ( ); 返回键值对个数


获取相关功能

方法名 功能 V get ( Object key ); 根据键获取值 Set keySet(); 获取所有键的Set集合 Collection values ( ); 获取所有值的Collection集合


Map 的遍历

  1. 先获取所有的键的Set集合,然后根据键获取值。
    此方式遍历含自定义类的Map源码
  2. Map存储的是一个个键值对对象,可以将键值对看成一个对象,遍历键值对对象再获取其值。
    • 这个键值对对象在Java中叫Entry,这个对象封装了键的信息和值的信息。因此Entry应该有对应方法获取这个对象的键和值。
      1. 获取键值对对象的Set集合。
      2. 遍历键值对对象的Set集合,获取每一个键值对对象。
      3. 根据键值对对象获取键和值。
        此方式遍历含自定义类的Map源码
import java.util.HashMap;import java.util.Map;import java.util.Set;/* * 有关Map遍历普通String类型的Demo * 方式1:先获取所有的键的Set集合,然后根据键获取值。 */public class MapTrversalDemo {    public static void main(String[] args) {          //创建Map集合          Map<String,String> map = new HashMap<>();          //往Map集合里添加元素          map.put("001","张三");          map.put("002", "李四");          map.put("003", "王五");          map.put("004", "赵六");          //步骤一:获取Map集合里所有的键值          Set<String> keySet = map.keySet();          //打印输出格式          System.out.println("编号\t姓名");          //根据键值获取值并打印输出          for (String keys : keySet) {            System.out.println(keys+"\t"+map.get(keys));        }           }}
import java.util.HashMap;import java.util.Map;import java.util.Map.Entry;import java.util.Set;/* * 有关Map的遍历 * 方法2: *     Map是由多个保存了键和值的键值对的Entry对象组成的,可以遍历这些Entry对象,再通过Entry分别获取键和值。 * */public class MapTrversalEntryDemo {    public static void main(String[] args) {            //创建Map对象            Map<String,String> map = new HashMap<>();            //在map中添加元素            map.put("001", "田馥甄");            map.put("002", "陈粒");            map.put("003", "谢春花");            map.put("004", "银临");            //打印输出标题            System.out.println("\t编号\t歌手");            //1. 获取键值对对象Entry的Set集合            Set<Entry<String, String>> entrySet = map.entrySet();            //2. 遍历键值对对象的Set集合,获取每一个键值对对象            for (Entry<String, String> entry : entrySet) {                //3. 根据键值对对象获取键和值                System.out.println("\t"+entry.getKey()+"\t"+entry.getValue());            }    }}

Entry图解

  • 注意EnrtyMap内部类,API应当在 Map 类中的嵌套类中查询。

图解如下:

Map.Entry的相关方法

方法名 功能 K getKey ( ) 返回与此项对应的键。 V getValue ( ) 返回与此项对应的值。 boolean equals ( Object o ) 比较指定对象与此项的相等性。 int hashCode ( ) 返回此映射项的哈希码值。 V setValue ( V value ) 用指定的值替换与此项对应的值(可选操作)。
原创粉丝点击