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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

对象数组:                                        //掌握
        数组既可以存基本类型,也可以存引用类型,
        存基本类型存的是 值,存引用类型存的是 地址值。

        需求:
                新建一个学生类,和测试类,
                然后在测试类中,创建一个学生类的对象数组,存3个学生的信息(包括姓名和年龄)
                然后遍历,打印学生的信息。
               
集合:        //掌握
        集合和数组的区别:
                集合:长度可变,只能存引用类型(因为存基本类型的话会自动装箱)
                数组:长度固定,可以存基本类型,也可以存引用类型。
                          存基本类型存的是 值,存引用类型存的是 地址值。

        以后我们学习任何体系,都采用“学顶层,用底层”,因为顶层是整个体系的共性内容,而底层才是具体的方法实现。

        集合体系://重点掌握
                单列集合:
                        顶层接口:Collection
                                List体系:有序(元素的存,取的顺序是一致),可重复。                       
                                        ArrayList:
                                                底层数据结构是 数组。查询快(修改快),增删慢。线程不安全(不同步),效率高。
                                        Vector:
                                                底层数据结构是 数组。查询快(修改快),增删慢。线程安全(同步),效率低。
                                        LinkedList:
                                                底层数据结构是 链表。查询慢(修改慢),增删快。线程不安全(不同步),效率高。
       
                                Set体系:无序(元素的存,取的顺序是不一致),唯一。       
                                        HashSet:底层数据结构是 哈希算法。
                                        TreeSet:底层数据结构是 二叉树算法。
       
                双列集合:
                        底层接口:Map
                                HashMap:底层数据结构是 哈希算法。
                                TreeMap:底层数据结构是 二叉树算法。


        Collection:中的方法:
                add()                                //掌握
                remove()                       
                clear()
                contains()                        //掌握
                isEmpty();                        //掌握
                size();           获取集合的长度        //掌握
                public Object[] toArray();                把集合转成数组

                了解:
                        c1.addAll(c2);                //把c2中所有的元素添加到集合 c1中               
                        c1.removeAll(c2);        // 在c1中删除 所有  c1和c2的交集元素
                        c1.contains(c2);        //判断c1中是否包含 c2的所有元素

                        c1.retainAll(c2);        //判断c1和c2是否有交集元素, 返回的结果是根据c1是否改变,
                                                                //如果c1的元素发生改变,返回true,不发生改变,返回false

        迭代器的原理:理解
                迭代器是用来对集合进行遍历的,但是我们知道每一种集合内部的数据结构都是不一样的,进而导致他们(集合)存,取元素的方式也是不一样的,如果我们把hasNext()和next()方法都定义到每个集合类中,整个集合体系就会显得比较冗余,所以经过不断的向上抽取,最终抽取出一个Iterator接口,让集合类来实现这个接口就可以了。



        List 体系的特有方法://掌握
                void add(int index, Object obj);                在指定位置添加元素
                Object remove(int index);                                删除指定位置的元素,并讲该元素返回
                Object get(int index)                                         根据索引获取元素
                Object set(int index,Object obj)                把指定位置的元素用obj替代,并讲修改前的结果返回
                注意:
                        index的范围不能超过 集合的长度,或者会报错:IndexOutOfBoundsException。
                        remove()进行删除操作的时候,不会自动装箱,也就是说,我们传的整数会直接被识别为:索引。
       

        并发修改异常:ConcurrentModificationException        //掌握
                产生原因:
                        通过普通的迭代器遍历集合的时候,又同时往集合中添加元素

                解决方案:
                        通过 ListIterator(列表迭代器)来遍历集合,并且通过 列表迭代器中的add()方法往集合中添加元素。

                        ListIterator(列表迭代器):
                                正向遍历:从前往后拿元素(掌握)//掌握
                                        boolean hasNext();
                                        Object next();

                                逆向遍历:从后往前拿元素(了解)
                                        boolean hasPrevious();
                                        Object previous();
                                        注意:进行逆向遍历之前,必须先对集合进行正向遍历,否则打印结果是空。

                                        "a","b","c","d",


        List 的儿子:                //理解
                Vector(现在已经基本上不用它了,被ArrayList替代了)
                addElement();                //添加元素
                elementAt();                //根据索引获取元素
                public Enumeration elements();        //获取集合中所有的元素
                        Enumeration中的两个方法:
                                hasMoreElements();        判断是否有下一个元素,根hasNext()作用一样。
                                nextElement();                获取下一个元素,跟现在的 next()方法作用一样。


                面试题:如何获取字符串,数组,集合的长度        //掌握
                        字符串:length()
                        数组:length
                        集合的长度:size()


        数据结构之 数组 和 链表:                //掌握
                数组:查询快,修改快,增删慢。
                        里边的每个元素都有编号(索引),并且编号是从0开始的。

                链表:查询慢,修改慢,增删快。
               
        List的三个儿子,我们怎么选择什么时候用谁?                //掌握
                查询多,用ArrayList,
                增删多,用LinkedList。
                如果是都多,或者需求不明确,用ArrayList。

               
        集合的遍历方式://掌握
                1、转数组遍历。
                2、通过迭代器遍历。               
                        A:通过集合对象获取其对应的 迭代器对象。
                                iterator();
                        B:判断集合(迭代器)中是否有元素,
                                hasNext()
                        C:有就获取。
                                next();
               

        List集合的独有遍历方式:                //掌握
                1、get()方法和size()方法结合使用。
                2、可以通过列表迭代器来遍历。               


                /*
                        遍历方式
                                优先掌握 普通迭代器, 列表迭代器,
                                之后是 get()方法和size()方法结合使用,
                                最后练习下  转数组遍历 方式。
                */







               







       



       

1 个回复

倒序浏览
这么复杂。。。毕老师的绝招都在这里了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马