zoukankan      html  css  js  c++  java
  • 集合框架__【Map集合】【keySet】【entrySet】【Map.Entry】


    Map集合

    该集合存储键值对,一对一对存储,而且要保证键的唯一性
    1,添加。
    put(K key, V value)当往同一个键上存入了两个值,原有的值会被新的值替换,并由put方法返回
    putAll(Map<? extends K,? extends V> m) 
    2,删除。
    clear() 
    remove(Object key) 
    3,判断。
    containsValue(Object value) 
    containsKey(Object key) 
    isEmpty() 
    4,获取。
    get(Object key)//可以通过get方法的返回值来判断一个件是否存在,是否为null
    size() 
    values() 
    重点:
    entrySet() 
    keySet() 
    Map的子类
    |--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。在jdk1.0.版本出现,效率低。
    |--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。用于替代hashtable,出现于jdk1.2.效率高。
    |--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
    Map类似于Set,Set底层就是使用了Map集合

    常见操作示例

    import java.util.*;
    class  MapDemo
    {
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);
    	}
    	public static void main(String[] args) 
    	{
    		Map<String,String> map = new HashMap<String,String>();
    		map.put("01","haha1");
    		map.put("02","haha2");
    		map.put("03","haha3");
    		map.put("03","ha哈哈哈");//当往同一个键上存入了两个值,原有的值会被新的值替换,并由put方法返回
    	
    		sop("containsKey:"+map.containsKey("001"));
    		//sop("remove: "+map.remove("02"));
    		sop("get: "+map.get("020"));//没有则返回null
    		map.put("04",null);
    		sop("get: "+map.get("04"));//可以通过get方法的返回值来判断一个件是否存在,是否为null
    		sop(map);//获取map集合中所有的值
    	}
    }

    map集合两种取出方式:keySet和entrySet

    1,keySet:将map集合转成set集合再通过迭代器取出

    ————即:将map中所有的键存入到Set集合。因为Set具备迭代器,可以通过迭代方式获取所有的键,再根据get方法,获取每个键对应的值

    2,entrySet:
    ————Set<Map.Entry<k,v>>  entrySet:将map集合中的映射关系存入到set集合中;这个关系的数据类型是Map.Entry,
    Map.Entry中的 Entry是一个接口,是Map接口的一个内部接口
    示例

    import java.util.*;
    class MapDemo2 
    {
    	public static void sop(Object obj)
    	{
    		System.out.println(obj);
    	}
    	public static void main(String[] args) 
    	{
    		Map<String,String> map = new HashMap<String,String>();
    		map.put("01","haha01");
    		map.put("04","haha04");
    		map.put("03","haha03");
    		map.put("02","haha02");
    //entrySet		
    		Set<Map.Entry<String,String>> entrySet = map.entrySet();//将Map集合中映射关系取出,存入到Set集合
    		Iterator<Map.Entry<String,String>> it = entrySet.iterator();
    		while (it.hasNext())
    		{
    			Map.Entry<String,String> me = it.next();
    			String key = me.getKey();		//getKey和getValue是Map.Entry<K,V>的方法
    			String value = me.getValue();	//
    			sop("key= "+key+" , value= "+value);
    		}
    //keySet
    		Set<String> keySet = map.keySet();//①获取map集合所有键的Set集合,keySet();
    		Iterator<String> it = keySet.iterator();//②通过Set集合迭代器获取键值
    		while (it.hasNext())
    		{
    			String key = it.next();
    			String value = map.get(key);//③通过键值获取其对应的值
    			sop("key= "+key+" ,value= "+value);
    		}
    	}
    }

    Map.Entry

     Entry是Map接口的一个内部接口

    在源码中的实现示例:

    interface Map
    {
    	public static interface Entry	//内部接口,static是定义在局部的,所以看到静态接口一定是内部接口
    	{
    		public abstract Object getKey();
    		public abstract Object getValue();
    	}
    }
    class HashMap implements Map
    {
    	class Haha implements Map.Entry	//内部类,实现接口的内部类
    	{
    		public  Object getKey(){};
    		public  Object getValue(){};
    	}
    }
    


    Map.Entry表示一种数据类型,即键值对的映射关系,用一个不恰当的比喻通俗点来说:Map中的元素就像是一对夫妻,存入到Set中的Map.Entury就相当于他们的一本结婚证

    图解:








  • 相关阅读:
    Trie字典树
    NET Web API和Web API Client Gen使Angular 2应用程序
    MyBatis实体属性与表的字段不对应的解决方案
    携程Apollo(阿波罗)配置中心使用Google代码风格文件(在Eclipse使用Google代码风格)(配合阿里巴巴代码规约快速设置)
    Spring Boot实现多个数据源教程收集(待实践)
    携程Apollo(阿波罗)配置中心用户管理和部门管理
    Spring Boot多数据源连接8小时后断开的问题解决(MySQL)
    携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发
    携程Apollo(阿波罗)配置中心把现有项目的配置文件迁移到Apollo
    携程Apollo(阿波罗)配置中心在Spring Boot项目快速集成
  • 原文地址:https://www.cnblogs.com/Joure/p/4337220.html
Copyright © 2011-2022 走看看