zoukankan      html  css  js  c++  java
  • Map笔记总结

    Map :存储的是键值对,一对一对出现的,要保证键的唯一性.

    Map常见的三个子类. 1.HashTable 底层是哈希表结构,不能存在null的情况.该集合是线程同步的.效率低 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
    2.HashMap 底层是哈希表数据结构,允许null值和null键,该集合不同步. 效率高
    3.TreeMap 底层是二叉树结构, 线程不同步,具备排序的特点.可以给Map集合中的键排序. 与Set很像,Set集合的底层就是使用了Map集合方法.

    Map其共性方法有:

    1.添加   put()   putAll() 2.删除   clear();   remove(); 3.判断   containsValue(Object value)   containsKey(Object key)   isEmpty(); 4.获取   get();   size();   values();

    基本共性方法代码演示:

    复制代码
    import java.util.*;
    class MapDemo
    {
        public static void main(String [] args)
        {
            Map<String,String> map = new HashMap<String,String>();  //Hash无序的.
            
            //添加元素,添加了相同的键,后添加的值会将原先的键对应的值替换掉.put方法会返回原先被覆盖的值.
            
            sop("Put :"+map.put("01","zhangsan01"));
            sop("Put :"+map.put("01","wangwu"));
            map.put("02","zhangsan02");
            map.put("03","zhangsan03");
            
            //判断是否包含
            sop("containsKey : zhangsan01 "+"------"+map.containsKey("01"));
            //sop("remove : "+map.remove("03"));  //找寻键,并打印出其对应的值: zhangsan03
            
            //获取
            sop("get : "+map.get("02"));
             
            map.put("04",null);  
            sop("get : "+map.get("04"));
            //可以通过个get方法的返回值来判断一个 键 是否存在. 通过返回null来判断.
            
            //获取Map集合中的所有值
            Collection<String> coll =  map.values();
            sop(coll);
            
            sop(map);
        }
    
        public static void sop(Object obj)
        {
            System.out.println(obj);    
        }
        
    }
    复制代码

    Map的重点方法:   entrySet()   KeySet() 这两种方法就是Map集合取出元素的方式:

    Map集合两种取出方式:

    1.Set<k> keySet 将Map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键. 在根据get方法,获取每个键所对应的值.
    Map集合取出原理:转成Set集合.在通过迭代器取出.

    2.Set<Map.Entry<k,v>>  entrySet

    将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry

    其中Entry其实是一个内部接口.定义在map接口里面

    格式如下: interface Map {   public static interface  Entry   {     public static void getValue();     public static void getKey();   }
    }
    class HashMap implements Map {   class Hash implements Map.Entry   {     public Object getValue(){};     public Object getKey(){};   } }

    两种取出方式的代码演练:

    复制代码
    /*
    
    Map集合两种取出方式:
        1.Set<k> keySet 
                将map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键.
                在根据get方法,获取每个键锁对应的值.
                
                Map集合取出原理:转成Set集合.在通过迭代器取出.
                
                
        2.Set<Map.Entry<k,v>>  entrySet ,将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry
        
        Entry其实是一个内部接口.定义在map接口里面
        interface Map
        {
            public static interface  Entry
            {
                public static void getValue();
                public static void getKey();
            }
            
        }
        
        class HashMap implements Map
        {
            class Hash implements Map.Entry
            {
                public Object getValue(){};
                public Object getKey(){};
            }
        }
        
    */
    
    import java.util.*;
    class MapDemo2
    {
        public static void main(String [] args)
        {
            Map<String,String> map = new HashMap<String,String>();  
            
            map.put("01","zhangsan01");
            map.put("02","zhangsan02");
            map.put("03","zhangsan03");
            map.put("04","zhangsan04");
            
            //将map集合中的 映射关系 取出.
            
            Set<Map.Entry<String,String>> mapEntry = map.entrySet();
            
            Iterator<Map.Entry<String,String>> it = mapEntry.iterator();
            
            while(it.hasNext())
            {
                Map.Entry<String,String> me = it.next();
                
                String key = me.getKey();
                String value = me.getValue();
                sop("Key :"+key+"Value :"+value);
            }
            
            
            
            /*
            
            //获取Map集合的所有键,并放在Set集合中. 获取方法: keySet();
            Set<String> keySet = map.keySet();
            
            //迭代取出所有的键.
            Iterator<String> it = keySet.iterator();
            
            while(it.hasNext())
            {
                String key = it.next();
                
                //有了键以后可以通过Map集合的get(key)方法获取其对应的值.
                String value = map.get(key);
                sop("Key :"+key+" Value :"+value);
            }
            
            */
            
        }
    
        public static void sop(Object obj)
        {
            System.out.println(obj);    
        }
        
    }
    复制代码

    相关练习:

    复制代码
    /*
    练习:
            
            每一个学生都有对应的归属地。
            键值对:    学生Student为键,地址类型String值。
            学生属性:姓名,年龄。
            注意:姓名和年龄相同的视为同一个学生。
            保证学生的唯一性。
    
    
            1.描述学生。
    
            2.定义map容器。将学生作为键,地址作为值。存入。
    
            3.获取map集合中的元素。
    
    
    */
    
    import java.util.*;
    
    class MapTest
    {
        public static void main(String [] args)
        {
            Map<Student,String> map = new HashMap<Student,String>();  
            
            map.put(new Student("zhangsan01",21),"beijing");
            map.put(new Student("zhangsan02",22),"shanghai");
            map.put(new Student("zhangsan03",23),"guangzhou");
            map.put(new Student("zhangsan04",24),"shenzhen");
        
            //第一种取出方式:keySet
            Set<Student> keySet = map.keySet();
            
            Iterator<Student> it = keySet.iterator();
            
            while(it.hasNext())
            {
                Student stu = it.next();
                
                String addr = map.get(stu);
                
                sop("第一种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", address : "+addr);
        
            }
            sop("-----------------------------------------");
            //第二种取出方式:entrySet
            
            Set<Map.Entry<Student,String>> entrySet = map.entrySet();
            
            Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();
            
            while(iter.hasNext())
            {
                Map.Entry<Student,String> me = iter.next();
                
                Student stu = me.getKey();
                
                String addr = me.getValue();
                
                sop("第二种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", adresss :"+addr);
            }              
            
        }
    
        public static void sop(Object obj)
        {
            System.out.println(obj);    
        }
        
    }
    
    class Student implements Comparable<Student>
    {
        private String name;
        private int age;
        
        Student(String name,int age)
        {
            this.name = name;
            this.age = age;
        }
        
        public int compareTo(Student s)
        {
            if(!(s instanceof Student))
                throw new ClassCastException("类型匹配失败");
            
                int num = new Integer(this.age).compareTo(new Integer(s.age));
                if(num == 0)
                {
                    return this.name.compareTo(s.name);
                }
            
            return num;
        }
            
        
        public int hashCode()
        {
            return name.hashCode()+age*17;
        }
        
        public boolean equals(Object obj)
        {
            if(!(obj instanceof Student))
                throw new ClassCastException("类型匹配失败");
            
            Student stu = (Student)obj;
            
            return this.getName().equals(stu.getName()) && this.age==stu.age;
        }
        
        public void setName(String name)
        {
            this.name = name;
        }
        
        public void setAge(int age)
        {
            this.age = age;
        }
        
        public String getName()
        {
            return name;
        }
        
        public  int getAge()
        {
            return age;
        }
        
    }
    复制代码
  • 相关阅读:
    敏捷实践-学习实践资料汇总
    从数据仓库到数据湖—浅谈数据架构演进
    JVM知识点汇总备忘
    Protobuf的使用和原理
    kafka数据定时导入hive便于后续做数据清洗
    Mybatis Mapper接口动态代理实现原理及二次开发
    软考论文-写作大纲-备考思路总结
    css3另一个属性写法
    css3动画效果
    jquery点击鼠标后关闭图片
  • 原文地址:https://www.cnblogs.com/wangtingyi/p/4757077.html
Copyright © 2011-2022 走看看