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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© syusouki   /  2015-10-28 09:53  /  12839 人查看  /  266 人回复  /   32 人收藏 转载请遵从CC协议 禁止商业使用本文

记得好繁琐,咋么办
回复 使用道具 举报
谢谢分享,太实用啦~
回复 使用道具 举报
shenfuhan 来自手机 中级黑马 2016-1-1 00:15:50
83#
特多,查询还差不多,不过是好东西
回复 使用道具 举报
感谢分享
回复 使用道具 举报
594869964 来自手机 中级黑马 2016-1-5 22:17:29
85#
嗯  很实用
回复 使用道具 举报
果断收藏,记的头大
回复 使用道具 举报
很有用,感谢
回复 使用道具 举报
这个必须有
回复 使用道具 举报
楼主辛苦!已收藏!
回复 使用道具 举报
集合框架:
        单列集合Collection
                List:有序(存取一致),可重复
                        ArrayList:底层数据结构是数组,查询快,增删慢。线程不安全,效率高。
                        Vector:底层数据结构是数组,查询快,增删慢。线程安全,效率低。
                        LinkedList:底层数据结构是链表,增删块,查询慢。线程不安全,效率高。

                Set:无序,唯一。
                        HashSet:底层数据结构是:哈希算法。线程不安全,效率高。
                                         依赖于两个方法: hashCode()  equals();

                        TreeSet:底层数据结构是:二叉树。线程不安全,效率高。
                                     自然排序:
                                                Comparable,  compareTo();

                                         比较器接口:
                                                Comparator,          compare();
        双列集合Map
                HashMap 底层数据结构是:哈希算法。线程不安全,效率高。
                        怎么保证键唯一性?
                                 依赖于两个方法: hashCode()  equals();
                TreeMap 底层数据结构是:二叉树。线程不安全,效率高。
                        怎么保证键唯一性的?
                                 自然排序:
                                        Comparable,  compareTo();

                                 比较器接口:
                                        Comparator,          compare();



如何选择使用哪种集合?
        看需求,看是否是单列
                是:用Collection
                        看是否唯一:
                                是:用Set
                                        是否需要排序:
                                                是:TreeSet
                                                否:HashSet
                                                需求不明确,用 HashSet
                                否:用List
                                        看是否考虑同步
                                                是:Vector
                                                否:
                                                        看查询多还是增删多:
                                                                查询多:ArrayList
                                                                增删多:LinkedList
                                                需求不明确,用ArrayList

                否:Map
                        是否需要排序:
                                是:TreeMap
                                否:HashMap
                                需求不明确,用HashMap



面试题:
        题目一:Map接口和Collection接口有什么不同?
                        Map:双列集合的顶层接口,键具有唯一性,数据结构只针对键有效。
                        Collection:单列集合的顶层接口,它的子体系Set具有唯一性,数据结构是针对于元素有效。

        题目二:字符串,数组,集合如何获取长度?

        题目三: HashMap 和 Hashtable 的区别?  
                        HashMap: JDK1.2以后出现的;线程不安全,效率高;可以存null值和null键。
                        Hashtable:JDK1.0以后出现的;线程安全,效率低;不可以存null值和null键。
                        相同点:底层都是哈希算法,都是双列集合。
        题目四: TreeSet 和 HashSet 是怎么保证元素的唯一性的。

               

        Map中的成员方法:
                添加:
                        put();
                删除:
                        remove();
                        clear();
                判断:
                        containsKey();
                        containsValue();
                        isEmpty();
                获取:
                        get();
                        keySet();
                        values();
                        Set<键值对对象的类型> entrySet();                //获取所有 键值对对象 的集合。
                                                                                                        //Set< Map.Entry<String,Integer> > entrySet();       
                长度:                                                       
                        size();

Map集合如何遍历:                        //今天的重点,必须掌握
        张三,23
        李四,24
        王五,25

        第一种:
                根据键找值。
                思路:
                        A:获取所有键的集合。                                //keySet();
                        B:遍历键的集合,获取到每一个键。   //迭代器,增强for
                        C:根据键找值。                                                //get()

       

        第二种:
                根据键值对找 键和值。
                A:获取所有键值对对象的 集合。   entrySet();
                B:遍历键值对对象的集合,获取到每一个键值对。   //迭代器,增强for
                C:根据键值对对象来获取 键 和 值。                                //getKey()  getValue();


        LinkedHashMap  :  有序。


Collections:
        public static  void sort(List list);
        public static  int  binarySearch(List list,K key);                //如果找不到,返回值是: 负的插入点减一( -插入点-1 )
        public static   V   max(Collection coll);
        public static   void reverse(List list);
        public static void shuffle(List list);   //随机置换,相当于洗牌

        工具类的两个特性:
                A:构造方法私有化。
                B:成员基本上都是静态的。

注意:泛型一般和集合结合使用。
泛型高级:
        ? extends E :  固定上边界(向下限定)
                E类及其子类
        ? super E        :  固定下边界(向上限定)
                E类及其父类


练习题:                        //中午把这些题都做一次,第三次选做(下午会讲)

        题目一:练习Map集合的第一种遍历方式(通过键找值)
                HashMap<String,Integer> hm = new HashMap<>();                //创建集合对象
                hm.put("瑞文",18);                                                                //往集合中添加元素
                hm.put("德邦",25);
                hm.put("德玛",40);
                //遍历集合,第一种方式:键找值
                for(String s : hm.keySet() ) {                //获取所有键的集合,然后遍历键集合,获取到每一个键
                        System.out.println(s + "***" + hm.get(s));                //根据键找值
                }

                //遍历集合,第二种方式:通过 键值对对象 找键和值
                //代码自行补全

        题目二:统计字符串中每个字符出现的次数。

        题目三:
                双元课堂有很多基础班:
              第88期基础班定义成一个双列集合,键是学生对象,值是学生的归属地
              第99期基础班定义成一个双列集合,键是学生对象,值是学生的归属地
                无论88期还是99期都是班级对象,所以为了便于统一管理,把这些班级对象添加到双元课堂集合中。
                解题核心关键点:
                        A:双元课堂集合的 定义。
                                HashMap<HashMap<Student,String>,String> hm = new HashMap<>();        //双元课堂集合

                        B:双元课堂集合的 遍历。
                                增强for的嵌套

                代码示例:
                        HashMap<Student,String> hm88 = new HashMap<>();                // 班级集合
                        hm.add(new Student("张三",23),"四川");

                        HashMap<Student,String> hm99 = new HashMap<>();                // 班级集合
                        hm.add(new Student("皇子",23),"北京");

                        HashMap<HashMap<Student,String>,String> hm = new HashMap<>();        //双元课堂集合
                        hm.put(hm88,"第88期基础班");                //把班级集合 当做是一个键,添加到 双元课堂集合中
                        hm.put(hm99,"第99期基础班");

        题目四:模拟斗地主发牌。
                思路:
                        A:买牌。
                        B:洗牌。
                        C:发牌。
                        D:看牌。
回复 使用道具 举报
值得收藏
回复 使用道具 举报
1178988315 来自手机 中级黑马 2016-1-22 01:08:18
92#
楼主辛苦了
回复 使用道具 举报
怪我咯~ 来自手机 初级黑马 2016-1-23 21:50:15
93#
谢谢楼主  马上就要用到了
回复 使用道具 举报
关注一下!!!!!!!!!!
回复 使用道具 举报
感谢分享
回复 使用道具 举报
学习了,顶一个
回复 使用道具 举报
感谢分享
回复 使用道具 举报
收藏了,楼主好人...
回复 使用道具 举报
P神 中级黑马 2016-2-14 18:01:19
99#
感谢大神分享  !!!!!
回复 使用道具 举报
好用   感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马