A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

就业班JavaSE第二阶段第4天


day04 【Map】
       
        特点:
                Map集合是一个双列集合,一个元素包含两个值(key,value)
                Map集合中的元素,key和value的数据类型可以相同,可以不同
                Map集合中的元素,key是不允许重复的,value是可以重复的
                Map集合中的元素,key和value是一一对应的
       
        常用子类(实现类)
                HashMap集合特点:
                        HashMap集合底层是哈希值:查询速度特别快
                        HashMap集合是一个无序的集合,存储元素和取出元素的顺序可能不一致
                LinkedHashMap集合的特点:
                        底层是哈希值+链表(保证迭代的顺序)
                        是一个有序的集合,存储元素和取出元素的顺序是一致的
                       
        遍历Map集合:
                使用Map集合中的方法keySet(),把Map集合所有的key却出来,存储到一个Set集合中
                遍历Set集合,获取Map集合中的每一个key
                通过Map集合中的方法get(key),通过key找到value
                package com.itheima.test01;

                import java.util.HashMap;
                import java.util.Iterator;
                import java.util.Map;
                import java.util.Set;

                public class MapTest01 {
                        public static void main(String[] args) {
                                //创建Map集合
                                Map<String,String> map = new HashMap<>();
                                //往集合中添加元素
                                map.put("大众","兰博基尼");
                                map.put("宝马","劳斯莱斯");
                                map.put("奔驰","迈巴赫");
                                System.out.println(map);
                                //遍历map集合,通过map中的keySet()方法得到key值,存储到Set集合中
                                Set<String> keySet = map.keySet();
                                //创建迭代器对象
                                Iterator<String> it = keySet.iterator();
                                while (it.hasNext()){
                                        //获取key值
                                        String key = it.next();
                                        //通过map集合中的get(key)方法获取value值
                                        String value = map.get(key);
                                        System.out.println(key+"="+value);
                                }
                        }

                }

       
        Entry键值对对象:
                当map集合已创建,那么就会在Map集合中创建一个Entry对象,用来记录键与值(键值对对象,键与值的映射关系)
               
                使用Entry键值对对象遍历Map集合:
                        使用map集合中的EntrySet(),把map集合中多个Entry对象取出来,存储到一个Set集合中
                        遍历Set集合,获取每一个Entry对象
                        使用Entry对象中的方法getKey()和getValue()获取键与值
                        package com.itheima.test02;

                        import java.util.HashMap;
                        import java.util.Map;
                        import java.util.Set;

                        public class MapEntryTest {
                                public static void main(String[] args) {
                                        //创建map集合
                                        Map<String, String> map = new HashMap<>();
                                        //添加元素
                                        map.put("大众","兰博基尼");
                                        map.put("宝马","劳斯莱斯");
                                        map.put("奔驰","迈巴赫");
                                        System.out.println(map);
                                        //通过map集合中的entrySet()方法得到entry键值对,存储在Set集合中
                                        Set<Map.Entry<String, String>> entrySet = map.entrySet();
                                        //增强for遍历entrySet集合获取键值对对象
                                        for (Map.Entry<String, String> entry : entrySet) {
                                                //通过entry中的getKey和getValue方法获取key和value值
                                                String key = entry.getKey();
                                                String value = entry.getValue();
                                                System.out.println(key+"="+value);
                                        }
                                }
                        }

        HashMap存储自定义类型键值:
       
       
                import java.util.HashMap;
                import java.util.Map;
                import java.util.Set;

                public class HashMapTest {
                        public static void main(String[] args) {
                                //HashMap存储自定义类型键值
                                Map<Student,String> map = new HashMap<>();
                                //添加元素,保证key值唯一,Student类中必须重写hashCode()和equals方法
                                map.put(new Student("耗子",25),"咸阳");
                                map.put(new Student("胖子",27),"曲阳");
                                map.put(new Student("老缩",26),"北京");
                                System.out.println(map);
                                //通过map中keySet方法获取key的集合
                                Set<Student> keySet = map.keySet();
                                //增强for遍历keySet集合
                                for (Student key : keySet) {
                                        //通过map的get(key)方法,根据key值获取value值
                                        String value = map.get(key);
                                        System.out.println(key+"--->"+value);
                                }
                                System.out.println("===================");
                                //通过map中的entrySet()方法获取键值对对象存储在set集合中
                                Set<Map.Entry<Student, String>> entrySet = map.entrySet();
                                for (Map.Entry<Student, String> entry : entrySet) {
                                        Student key = entry.getKey();
                                        String value = entry.getValue();
                                        System.out.println(key+"--->"+value);
                                }
                        }
                }
               
        LinkedHashMap集合:
                不可存储重复元素,有序集合

        Hashtable与HashMap的区别:
                Hashtable底层也是一个哈希表,是一个线程安全的集合,是单线程集合,速度慢
                HashMap底层是一个哈希表,是一个线程不安全的集合,是多线程的集合,速度快
               
                hashmap集合可以存储null值,null键
                hashtable集合不能存储null值,null键
               
                hashtable和Vector集合一样,在jdk1.2版本之后被(HashMap,ArrayList)取代了
                Hashtable的子类Properties集合依然活跃,是唯一一个和IO流结合的聚合
               

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马