zoukankan      html  css  js  c++  java
  • 双列集合

    java.util.Map<K,V>集合

    Map集合的特点

    1. Map集合是一个双列集合,一个元素包含两个值(一个key,一个value)

    2. Map集合中的元素,key和value的数据类型可以相同,也可以不同

    3. Map集合中的元素,key是不允许重复的,value是可以重复的

    4. Map集合中的元素,key和value是一一对应

    常用实现类:

    1. HashMap,底层是哈希表:查询的速度特别快,HashMap集合是一个无序的集合,存储元素和取出元素的顺序可能不一致,是线程不安全的集合,是多线程的集合,速度快;可以存储null值,null键

    2. LinkedHashMap,底层是哈希表+链表(保证迭代顺序),是一个有序的集合,存储元素和取出元素的顺序一致;可以存储null值,null键

    3. HashTable,底层是哈希表,线程安全的集合,是单线程的集合,速度慢;不允许null值和null键;HashTable和Vector集合一样,在jdk1.2版本之后被更先进的集合(HashMap,ArrayList)取代了;HashTable的子类Properties依然活跃在历史舞台,Properties集合是唯一一个和IO流相结合的集合

    Map接口中的常用方法

    public V put(K key, V value) : 把指定的键与指定的值添加到Map集合中
    public V remove(Object key) : 把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值
    public V get(Object key) 根据指定的键,在Map集合中获取对应的值
    public Set<K> keySet() : 获取Map集合中所有的键,存储到Set集合中
    public Set<Map.Entry<K,V>> entrySet() : 获取到Map集合中所有的键值对对象的集合(Set集合)

    HashMap存储自定义类型的键值

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Set;
    
    /*
        HashMap存储自定义类型键值
        Map集合保证key是唯一的:
            作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一
     */
    public class Demo01HashMapSavePerson {
        public static void main(String[] args) {
            show02();
        }
    
        /*
            HashMap存储自定义类型键值
            key:Person类型
                Person类就必须重写hashCode方法和equals方法,以保证key唯一
            value:String类型
                可以重复
         */
        private static void show02() {
            //创建HashMap集合
            HashMap<Person,String> map = new HashMap<>();
            //往集合中添加元素
            map.put(new Person("女王",18),"英国");
            map.put(new Person("秦始皇",18),"秦国");
            map.put(new Person("普京",30),"俄罗斯");
            map.put(new Person("女王",18),"毛里求斯");
            //使用entrySet和增强for遍历Map集合
            Set<Map.Entry<Person, String>> set = map.entrySet();
            for (Map.Entry<Person, String> entry : set) {
                Person key = entry.getKey();
                String value = entry.getValue();
                System.out.println(key+"-->"+value);
            }
        }
    
        /*
            HashMap存储自定义类型键值
            key:String类型
                String类重写hashCode方法和equals方法,可以保证key唯一
            value:Person类型
                value可以重复(同名同年龄的人视为同一个)
         */
        private static void show01() {
            //创建HashMap集合
            HashMap<String,Person> map = new HashMap<>();
            //往集合中添加元素
            map.put("北京",new Person("张三",18));
            map.put("上海",new Person("李四",19));
            map.put("广州",new Person("王五",20));
            map.put("北京",new Person("赵六",18));
            //使用keySet加增强for遍历Map集合
            Set<String> set = map.keySet();
            for (String key : set) {
                Person value = map.get(key);
                System.out.println(key+"-->"+value);
            }
        }
    }

    JDK9对集合添加的优化

    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    
    /*
        JDK9的新特性:
            List接口,Set接口,Map接口:里边增加了一个静态的方法of,可以给集合一次性添加多个元素
            static <E> List<E> of​(E... elements)
            使用前提:
                当集合中存储的元素的个数已经确定了,不在改变时使用
         注意:
            1.of方法只适用于List接口,Set接口,Map接口,不适用于接接口的实现类
            2.of方法的返回值是一个不能改变的集合,集合不能再使用add,put方法添加元素,会抛出异常
            3.Set接口和Map接口在调用of方法的时候,不能有重复的元素,否则会抛出异常
     */
    public class Demo01JDK9 {
        public static void main(String[] args) {
            List<String> list = List.of("a", "b", "a", "c", "d");
            System.out.println(list);//[a, b, a, c, d]
            //list.add("w");//UnsupportedOperationException:不支持操作异常
    
            //Set<String> set = Set.of("a", "b", "a", "c", "d");//IllegalArgumentException:非法参数异常,有重复的元素
            Set<String> set = Set.of("a", "b", "c", "d");
            System.out.println(set);
            //set.add("w");//UnsupportedOperationException:不支持操作异常
    
            //Map<String, Integer> map = Map.of("张三", 18, "李四", 19, "王五", 20,"张三",19);////IllegalArgumentException:非法参数异常,有重复的元素
            Map<String, Integer> map = Map.of("张三", 18, "李四", 19, "王五", 20);
            System.out.println(map);//{王五=20, 李四=19, 张三=18}
            //map.put("赵四",30);//UnsupportedOperationException:不支持操作异常
        }
    }
  • 相关阅读:
    你不知道的JavaScript(上)this和对象原型(二)
    hihocoder 1566 皇室成员的名字
    csu 1756: Prime
    csu 1770: 按钮控制彩灯实验
    csu 1898: 复盘拉火车
    csu 1901: 赏赐 OR 灾难
    csu 1909: Perfect Chocolate
    csu 1958: 数字游戏
    symfony2 环境搭建笔记
    php preg_match($p, $str, $match)方法简介
  • 原文地址:https://www.cnblogs.com/svipero/p/12454834.html
Copyright © 2011-2022 走看看