admin 管理员组

文章数量: 887021

Map..

一、Map<K,V>  (Map接口)

        (1)类型参数:

                K—此映射所维护的键的类型

                V—映射值的类型

        (2)Collection与Map的对比

        (3)Map集合的特点:

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

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

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

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

二、java.util.HashMap<k,v>集合 implements Map<k,v>接口

        1.HashMap集合的特点:

        (1)HashMap集合底层是哈希表,查询的速度特别快

                JDK1.8之前:数组+单向链表

                JDK1.8之后:数组+单向链表 / 红黑树(链表的长度超过8):提高查询的速度

        (2)HashMap集合是一个无序的集合,存储元素和取出元素的顺序有可能不一致

        java.util.LinkedHashMap<k,v>集合 extends HashMap<k,v>集合

        2.LinkedHashMap的特点:

        (1)LinkedHashMap集合底层是哈希表+链表(保证迭代顺序)

        (2)LinkedHashMap集合是一个有序的集合,存储元素和取出元素的顺序是一致的

三、Map接口中的常用方法

        1.public V put(k,v):把指定的键与指定的值添加到Map集合中

                返回值:v

                        存储键值对的时候,k不重复,返回值v是null、                                

                        存储键值对的时候,k重复,会使用新的v来替换map中重复的value,返回被替换的value值

        

        Map<String,String> map=new HashMap<>();String v1 = map.put("唐艺昕", "张若云");String v2 = map.put("唐艺昕", "张若昀");System.out.println(v2);   //输出的是被替换的”张若云“,一般情况下put()不用接收返回值这个写法只是为了更好的理解map.put("孙怡","董子健");map.put("张嘉倪","买超");map.put("李晨","范冰冰");System.out.println(map);

        2. public V remove(Object k):把指定的键所对应的键值对元素在Map集合中删除,反会被删除元素的值     

        k存在,返回被删除的值,k不存在,返回null

        String v3 = map.remove("李晨");System.out.println(v3);   //输出的是范冰冰System.out.println(map);  //{孙怡=董子健, 唐艺昕=张若昀, 张嘉倪=买超}

        3.public V get(Object k):根据指定的键,在Map集合中获取对应的值

        k存在,返回对应的v值,k不存在,返回null

        4.boolean containsKey(Object k):判断集合中是否包含指定的键

        boolean v4 = map.containsKey("唐艺昕");System.out.println(v4);   //true

        5.keySet()

 2        Map集合遍历的第一种方式:通过键找值的方式

                实现步骤

                (1)使用Map集合中的方法keySet(),把Map集合所有的k取出来,存储到一个set集合中

                (2)遍历set集合,获取Map集合中的每一个k

                (3)通过Map集合中的方法get(k),通过k找到v

        Set<String> set = map.keySet();//使用迭代器进行遍历Iterator<String> it = set.iterator();while(it.hasNext()) {String key = it.next();  //取出来的是key值String value = map.get(key); //通过key来get value,此处是value的值System.out.println(key+"&"+value);}//还可以通过增强for循环for (String key1 : set) {String value1 = map.get(key1);System.out.println(key1+"&"+value1);}

 3.Map.Entry<K,V>在Map接口中有一个内部接口Entry

        (1)作用:当Map集合一创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)

        (2)entrySet():把Map集合中多个Entry对象取出来,存储到一个Set集合中去k

四、HashMap存储自定义类型键值

        1.Map集合保证key值元素是唯一的:作为key的元素,必须重写hashCode方法和equals方法,以保证key唯一

五、HahsMap中key不允许重复,无序

       LinkedHahsMap中key不允许重复,有序

六、Hashtable<k,v>

        1.对比:

                Hashtable:底层是一个哈希表,是一个线程安全集合,是单线程集合,速度慢

                HashMap:底层是一个哈希表,是一个线程不安全集合,是多线程集合,速度快

                注意:Hashtable集合不能存储null值,null键,以前学过的其他集合都可以

        2.Hashtable和Vector集合一样,在JDK1.2版本以后被更先进的(HashMap,ArrayList)取代了,但是Hashtable的子类Properties依然活跃【Properties集合是唯一和IO流相结合的集合】

本文标签: mAP