黑马程序员技术交流社区

标题: day18 [打印本页]

作者: Echo0912    时间: 2015-9-15 12:13
标题: day18
Map接口和Collection接口有什么不同:
        Map集合:双列集合,键是唯一的,数据结构只针对键有效。
        Collection:单列集合,Set体系是具有唯一性的。数据类型针对集合中的元素有效。

        Map集合中的方法;
                添加:
                        V put(K key, V value)
                                如果键是第一次添加,返回null
                                如果键不是第一次添加,就用新值替换之间的旧值,并且返回之前的旧值
                                "zhangsan",30
                                //"zhangsan",30
                                "lisi",30

                删除:
                        void clear();
                        V reomove(Object key);  根据键,移除该键值对。返回值

                判断:
                        boolean containsKey(Object key);          判断集合中是否包含给定的键
                        boolean containsValue(Object value);  判断集合中是否包含给定的值
                        boolean isEmpty();   判断集合是否为空

                获取:
                 Set< Map.Entry<K,V> > entrySet();    返回 键值对对象 的集合。
                 V get(K key);                        根据键获取值
                 Set<T> keySet();                获取双列集合中,所有键的集合
                 Collection<V> values();  获取双列集合中,所有值的集合

                长度:
                        int size();   返回的是集合中 键值对 的个数。



        Map集合的遍历:
                1、根据键找值:
                        思路:
                                1、通过keySet()方法获取到所有的键。
                                2、遍历第一步获取到的键的集合,拿到每一个键。
                                3、获取到键后,调用get()方法,找到其对应的值。
                                HashMap<String,Integer>  hm = new HashMap<>();
                                hm.put("zhangsan",28);
                                hm.put("lisi",30);

                                //拿到所有的键
                                Set<String> set = hm.keySet();

                                //遍历第一步获取到的键的集合,拿到每一个键
                                for(String s : set){
                                        System.out.println( "键" + s + "对应的值是:" + hm.get(s));
                                }


                2、获取到键值对的集合,然后从中获取到键和值
                        1、通过entrySet()方法拿到所有的 键值对对象 的集合。
                        2、遍历第一步获取到的键值对对象的集合,拿到每一对键值对对象。
                        3、获取到键值对对象后,调用getKey(),getValue()方法,找到其对应的键和值。
                        HashMap<String,Integer>  hm = new HashMap<>();
                        hm.put("zhangsan",28);
                        hm.put("lisi",30);

                        Set< Map.Entry<String,Integer> > set = hm.entrySet();
                        // Map.Entry<String,Integer> 可以看做是以前咱们将的动物类案例的Animal接口
                        //Entry<String,Integer>  可以看做是实现了Animal接口的子类(Dog)
                        for( Map.Entry<String,Integer> en : set){   //en就是每一个键值对对象
                                System.out.println(en.getKey() + "****" + en.getValue());
                        }

        Map.Entry原码解析:
                1、Entry<K,V>其实是 Map.Entry<K,V>的一个子类。
                2、Entry<K,V>其实是一个键值对对象,Map是一个接口,Entry是Map接口中的接口。(内部接口)

        LinkedHashMap:
                底层数据结构是链表,可以保证元素的存取顺序是一致的。


中午:
        1、HashMap存: 键:Student,值:String
        2、TreeMap存: 键:Student,值:String  (按照年龄排序)
        3、统计每个字符出现的次数。(HashMap做)


        选做:
                双元课堂有很多基础班:
              第88期基础班定义成一个双列集合,键是学生对象,值是学生的归属地
              第99期基础班定义成一个双列集合,键是学生对象,值是学生的归属地
        无论88期还是99期都是班级对象,所以为了便于统一管理,把这些班级对象添加到双元课堂集合中。

        HashMap<Student,String>  88期 = new HashMap<>();
        HashMap<Student,String>  99期 = new HashMap<>();

        HashMap< HashMap<Student,String> ,String>  hm = new HashMap<>();


HashMap和Hashtable的区别:
        区别:
                Hashtable:JDK1.0以后的,线程安全,效率低。不能存null值和null键。
                HashMap:   JDK1.2以后的,线程不安全的,效率高。可以存null值和null键。
        (加一句:)这两个类也有共同点,他们都是双列集合,底层都是哈希算法。



Collections集合工具类中的方法;
        sort(List list);   //对给定集合进行排序
        binarySearch(List list, Oject obj);  //二分查找
        max(Collectin coll);   //求最大值
        reverse(List list);                //反转
        shuffle(List list);     //随机置换。(相当于“洗牌”)

模拟斗地主发牌:
       



泛型:
        固定下边界(向上限定)
                ? super E    E类或者E的父类

        固定上边界(向下限定)
                ? extends E  E类或者E的子类
作者: 纳木错的程序猿    时间: 2015-9-15 23:22
都到18天了啊,是自学的吗




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2