• Map集合


    1 Map父接口

    特点:存储一对数据(Key-Value),无序、无下标,键不可重复,值可重复。

    定义public interface Map<K,V>

    方法

    int size();//集合大小
    boolean isEmpty();//是否为空
    boolean containsKey(Object key);//是否包含key
    boolean containsValue(Object value);//是否包含value
    V put(K key,V value)   //将对象存入到集合中,关联键值。key重复则覆盖原值。
    Object get(Object key) //根据键获取对应的值
    V remove(Object key); //删除key 返回对应的值
    void clear(); //清空集合
    Set<K> keySet()        //返回所有的key
    Collection<V> values() //返回包含所有值的Collection
    Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 
    

    2 HashMap

    2.1 HashMap的定义

    基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 --jdk1.6 api

    public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
    

    2.2 HashMap使用

    /**
     * Map集合的使用
     * 特点:存储键值对;键不可以重复,值可以重复;无序
     * HashMap:
     *  jdk1.2版本,线程不安全,运行效率快;允许用null作为key或是value
     */
    public class Map1 {
        public static void main(String[] args) {
    
            //创建集合
            Map<String,String> map = new HashMap<>();
    
            //添加元素
            map.put("cn","中国");
            map.put("uk","英国");
            map.put("usa","美国");
            map.put("cn","zhongguo");//已经存在键为"cn"的值了,会把原来的值覆盖掉
            map.put(null,"日本");//存放null键值
            map.put("ckk",null);
            System.out.println(map);
    
            //判断
            System.out.println(map.containsKey("cn"));//判断是否存在key
            System.out.println(map.containsValue("中国"));//判断是否存在value
    
    
            //删除元素
    //        String usa = map.remove("usa");//会返回删除key所对应的value,key不存在返回null
    //        System.out.println("删除了:"+usa);
    //        boolean removed = map.remove("uk", "英国");//会返回是否删除成功
    //        System.out.println("删除成功:"+removed);
    
            //遍历
            //方法一 获取key的set集合,使用迭代器
    //        Set<String> keySet = map.keySet();
    //        Iterator<String> keyIterator = keySet.iterator();
    //        while (keyIterator.hasNext()){
    //            String key = keyIterator.next();
    //            String value = map.get(key);
    //            System.out.println(key+"---"+value);
    //        }
    
            //方法二 获取key的set集合,使用增强for
    //        Set<String> keySet = map.keySet();
    //        for (String key : keySet) {
    //            System.out.println(key+"---"+map.get(key));
    //        }
    
            //方法三 获取map的Entry组成的Set集合,然后使用迭代器遍历
    //        Set<Map2.Entry<String, String>> entrySet = map.entrySet();
    //        Iterator<Map2.Entry<String, String>> entryIterator = entrySet.iterator();
    //        while (entryIterator.hasNext()){
    //            Map2.Entry<String, String> entry = entryIterator.next();
    //            String key = entry.getKey();
    //            String value = entry.getValue();
    //            System.out.println(key+"---"+value);
    //        }
    
            //方法四 获取map的Entry组成的Set集合,然后使用迭代器遍历
            Set<Map.Entry<String, String>> entrySet = map.entrySet();
            for (Map.Entry<String, String> entry : entrySet) {
                String key = entry.getKey();
                String value = entry.getValue();
                System.out.println(key+"---"+value);
            }
    
        }
    }
    

    运行结果

    {usa=美国, uk=英国, cn=zhongguo}
    true
    false
    usa---美国
    uk---英国
    cn---zhongguo
    

    HashMap判断重复的方式和HashSet是一样的,都是判断元素(key)的hashCodeequals是否相同。存入HashMap的key要重写这两个方法。

    3 Hashtable(不使用)

    jdk1.0版本,线程安全,运行效率慢;不允许null作为key或是value

    4 Properties

    Hashtable的子类,要求key和value都是String。通常用于配置文件的读取。

    5 TreeMap

    实现了SortedMap接口(是Map的子接口),可以对key自动排序。
    TreeMap的key要实现Comparable接口,为了排序。

    /**
     * TreeMap的使用
     * 存储结构:红黑树
     */
    public class Map2 {
        public static void main(String[] args) {
            //创建集合
            Map<Student,String> stringMap = new TreeMap<>();
    
            //添加元素
            Student s1 = new Student("王二",100);
            Student s2 = new Student("张三",101);
            Student s3 = new Student("李四",102);
            stringMap.put(s1,"北京");
            stringMap.put(s2,"上海");
            stringMap.put(s3,"天津");
            stringMap.put(s3,"aa");
            System.out.println(stringMap);
    
        }
    }
    

    Student类

    public class Student implements Comparable<Student>{
        private String name;
        private int stuNo;
    
        //getter、setter、构造器、toString
    
        @Override
        public int compareTo(Student o) {
            return this.stuNo-o.stuNo;
        }
    }
    

    运行结果

    {Student{name='王二', stuNo=100}=北京, Student{name='张三', stuNo=101}=上海, Student{name='李四', stuNo=102}=aa}
    

    HashMap HashTable TreeMap区别

    HashMap HashTable TreeMap
    同步
    key有序
    null key只能有一个null
    value可以多个null
    都不能为null key不能为null
    value可以多个null
    --------------- 我每一次回头,都感觉自己不够努力,所以我不再回头。 ---------------
  • 相关阅读:
    BZOJ 3754 Tree之最小方差树
    【CSS】318- CSS实现宽高等比自适应容器
    【Vuejs】317- 提升90%加载速度——Vuecli下的首屏性能优化
    【H5】316- 移动端H5跳坑指南
    【每周小回顾】2- 一起回顾上周精彩内容
    【Webpack】315- 手把手教你搭建基于 webpack4 的 vue2 多页应用
    【Web技术】314- 前端组件设计原则
    【JS】313- 复习 回流和重绘
    【JS】312- 复习 JavaScript 严格模式(Strict Mode)
    【Canvas】311- 解决 canvas 在高清屏中绘制模糊的问题
  • 原文地址:https://www.cnblogs.com/zjw-blog/p/13802419.html
Copyright © 2020-2023  润新知