zoukankan      html  css  js  c++  java
  • 集合框架(04)HashMap

    集合Map的简单方法:该集合存储键值对,一对一对往里面存,而且要保证健的唯一性

    1.添加

             put(K key,V value)

              putAll(Map<? Extends k, ? extends v> m)

    2.删除

      clear()

    3.判断

      containsValue(Object value)

      containsKey(Object key)

      isEmpty()

    4.获取

       get(Object key)

       size()

       values()

       entrySet()

       keySet()

     方法代码示例:

    package CollectionTest;
    
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Map;
    
    public class HashMapDemo1 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Map<String,String> map = new HashMap<String,String>();
            //在添加元素时,如果添加的相同的键,则后添加的键对应的值会覆盖前面的值
            map.put("001", "zhangsan");
            map.put("002", "lisi");
            map.put("003", "wangwu");
            
            System.out.println("containsKsy:"+map.containsKey("002"));
            //remove移除键的同时,返回的是此键对应的值
            //System.out.println("remove:"+map.remove("002"));
            
            //在HashMap中null可以当做键存起来
            map.put(null, "haha");
            System.out.println(map.get(null));
            
            //通过values方法得到HashMap的所有值,此时返回的是集合
            Collection<String> coll = map.values();
            System.out.println("values:"+coll);
            
    
        }
    
    }

     Map(三种类型以及他们的区别):

    •      ----HashTable:底层是哈表表数据结构,键和值不可以出现null,该集合石线程同步的
    •      ----HashMap:底层是哈希白表数据结构,允许使用null值和null键,该集合石不同步的
    •      ----TreeMap:底层是二叉树数据结构,线程不同步,可以用于给map集合中的键进行排序

    Map集合的两种取出方式:

    1. Set<k> keySet:将map中所有的键存入到set集合,因为set具备迭代器,所有可以迭代方式出去所有的键,在根据get方法,获取每一个键对应的值

             2.Set<Map.Entry<k,v>>  entrySet:将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是Map.Entry

                 Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口

                 Map.Entry内部代码示例:

      

    interface Map{
        public static interface Entry{
            public abstract Object getKey();
            public abstract Object getValue();
        }
    }

           

    Map集合的取出原理:

    将map集合转化成set集合,之后调用迭代器取出

     Map集合第一种出去方式代码示例:

    package CollectionTest;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    public class HashMapDemo2 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Map<String,String> map = new HashMap<String,String>();
            map.put("001", "zhangsan");
            map.put("002", "lisi");
            map.put("003", "wangwu");
            //先获取map集合的所有键的Set集合,keySet
            Set<String> keyset = map.keySet();
             //有了set集合就可以获得其迭代器
            Iterator<String> it = keyset.iterator();
            while(it.hasNext()){
                String key = it.next();
                String value = map.get(key);
                System.out.println("Key_"+key+":"+value);
            }
            
            
    
        }
    
    }

      Map集合第二种出去方式代码示例:

    package CollectionTest;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    
    public class HashMapDemo2 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Map<String,String> map = new HashMap<String,String>();
            map.put("001", "zhangsan");
            map.put("002", "lisi");
            map.put("003", "wangwu");
            Set<Map.Entry<String, String>> entry = map.entrySet();
            Iterator<Map.Entry<String, String>> it = entry.iterator();
            while(it.hasNext()){
                Map.Entry<String, String> me = it.next();
                String key = me.getKey();
                String value = me.getValue();
                System.out.println(key+":"+value);
            }
        }
    
    }

     Map中除去重复的键需要重写HashCode和equals方法

    每一个学生都有对应的归属地

    学生Student, 地址String

    学生属性:姓名,年龄

    注意:姓名和年龄相同的是为同一个学生

    保证学生的唯一性 

    描述学生

    定义map容器,将学生作为键,地址最为值,存入,获取map集合中的元素

    重写equals和HashCode可以:右击鼠标->source->重写HashCode和equals:代码示例:

    package CollectionTest;
    
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    
    class Student{
        private String name;
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + age;
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            return result;
        }
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Student other = (Student) obj;
            if (age != other.age)
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            return true;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getAge() {
            return age;
        }
        public void setAge(int age) {
            this.age = age;
        }
        private int age;
        Student(String name,int age){
            this.name=name;
            this.age=age;
        }
        
        //重写了toString方法 可以直接返回name和age
        public String toString(){
            return name+":"+age;
        }
    }
    
    public class HashMapDemo3 {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            
            Map<Student,String> map = new HashMap<Student,String>();
            map.put(new Student("zhangsan",10), "nanjing");
            map.put(new Student("zhangsan",10), "shanghai");
            map.put(new Student("lisi",20), "shanghai");
            map.put(new Student("wangwu",30), "guangzhou");
            
            Set<Student> keyset = map.keySet();
            
            Iterator<Student> it = keyset.iterator();
            while(it.hasNext()){
                Student stu = it.next();
                String add = map.get(stu);
                System.out.println(stu+","+add);
            }
            System.out.println("..........................");
            Set<Map.Entry<Student, String>> set = map.entrySet();
            
            Iterator<Map.Entry<Student, String>> it2 = set.iterator();
            while(it2.hasNext()){
                Map.Entry<Student, String> me = it2.next();
                Student stu2 = me.getKey();
                String add2 = me.getValue();
                System.out.println(stu2+","+add2);
            }
            
    
        }
    
    }
  • 相关阅读:
    蛙蛙推荐:一个程序员2012年技术学习总结
    蛙蛙推荐:第一堂编程课提纲
    蛙蛙推荐:笨办法提高代码质量
    蛙蛙推荐:Backbone和seajs搭配最佳实践探讨
    时髦的互联网公司都在用什么技术?
    蛙蛙推荐:让SecureCRT好使起来
    Linux LVM卷组管理 规格严格
    聊聊jdbc statement的fetchSize 规格严格
    老生常谈: Eclipse远程调试 规格严格
    产品经理的34个感想
  • 原文地址:https://www.cnblogs.com/sunxiaoyan/p/8682135.html
Copyright © 2011-2022 走看看