黑马程序员技术交流社区

标题: 集合总结 [打印本页]

作者: 徐家誉    时间: 2015-6-30 01:32
标题: 集合总结
1:集合(理解)
        (1)java是一种面向对象语言,如果我们要针对多个对象进行操作,就必须对多个对象进行存储。
           而对多个元素进行存储,前面我们学习过数组,数组的弊端,长度固定。这样,数组将不能
           满足变化的要求。所以,java就提供了集合供我们使用。
        (2)集合的特点:
                1、长度可以发生改变
                2、只能存储对象
                3、可以存储多种类型对象(一般存储的还是同一种)
        (3)集合和数组的区别
                1、长度问题
                        数组固定
                        集合可变
                2、存储元素问题
                        数组可以是基本类型,也可以是引用类型。
                        集合只能是引用类型。
                3、是否同一类型
                        数组元素类型一致。
                        集合元素类型可以不一致。
        (4)集合体系的由来
                集合是存储多个元素的容器,但是,由于数据结构不同,java就提供了多种集合类。
                而这多种集合类有共性的功能,所以,通过不断的向上抽取,最终形成了集合体系
                结构。

                数据结构:数据存储的方式。

                程序 = 算法 + 数据结构

                Collection
                        |--List
                                |--ArrayList
                                |--Vector
                                |--LinkedList
                        |--Set
                                |--HashSet
                                |--TreeSet
        (5)如何学习和使用一个继承体系呢?
                学习顶层:因为顶层定义的是共性内容。
                使用底层:因为底层才是具体的实现。

2:Collection的功能(掌握)
        (1)Collection的功能(自己补齐中文意思)
                1、添加功能(掌握)
                        boolean add(Object obj):向集合中添加一个元素。
                        boolean addAll(Collection c):向集合中添加一个集合的元素。
                2、删除功能(掌握)
                        void clear():删除集合中所有的元素。
                        boolean remove(Object obj):删除集合中指定的元素。
                        boolean removeAll(Collection c):删除集合中指定的集合元素。 只要有数据删除,则返回true。
                3、判断功能(掌握)
                        boolean isEmpty():判断集合是否为空。
                        boolean contains(Object obj):判断集合是否包含指定的元素。
                        boolean containsAll(Collection c):判断集合是否包含指定的集合中的元素。只有所有数据包含了,才返回true。
                4、遍历功能(掌握)
                        Iterator iterator():迭代器。
                                hasNext():判断是否还有元素
                                next():获取下一个元素
                5、长度功能(掌握)
                        int size():获得集合的元素个数。
                6、交集功能
                        boolean retainAll(Collection c):判断集合中是否有相同的元素。
                                如果有两个集合A和B。A对B做交集。
                                A集合保存的是交集元素,B集合不发生改变。
                                返回值表示的是A集合是否发生过改变。
                7、转换功能
                        Object[] toArray():把集合变成数组。
        (2)迭代器的使用
                1、使用步骤
                        1、通过集合对象获取迭代器对象。
                        2、通过迭代器对象判断。
                        3、通过迭代器对象获取。
                2、迭代器原理
                        由于多种集合的数据结构不同,所以存储方式不同,所以,取出方式也不同。
                        这个时候,我们就把判断和获取功能定义在了一个接口中,将来,遍历哪种
                        集合的时候,只要该集合内部实现这个接口即可。
                3、迭代器源码
                        public interface Iterator
                        {
                                public abstract boolean hasNext();
                                public abstract Object next();
                        }

                        public interface Collection
                        {
                                public abstract Iterator iterator();
                        }

                        public interface List extends Collection
                        {
                                ...
                        }
                       
                        public class ArrayList implements List
                        {
                                public Iterator iterator()
                                {
                                        return new Itr();
                                }

                                private class Itr implements Iterator
                                {
                                        public boolean hasNext(){...}
                                        public Object next(){...}
                                }
                        }
        (3)集合的常见使用步骤:
                1、创建集合对象
                2、创建元素对象
                3、把元素添加到集合中
                4、遍历集合
                        1、通过集合对象获取迭代器对象。
                        2、通过迭代器对象判断。
                        3、通过迭代器对象获取。
        (4)Collection存储字符串和自定义对象并遍历。
                1、存储字符串
                        Collection c = new ArrayList();

                        //String s = "hello";
                        //c.add(s);
                        c.add("hello");
                        c.add("world");
                        c.add("java");

                        Iterator it = c.iterator();
                        while(it.hasNext())
                        {
                                String s = (String)it.next();
                                System.out.println(s);
                        }


                2、存储自定义对象(自己补齐)
                            Collection c=new ArrayList();
                            Student s1=new Student("林青霞",26);           
                            c.add("s1");
                     
                            Iterator it=c.iterator();
                            while(it.hasNext())
                              {
                                String s=(String)it.next();
                                System.out.println(s);
                              }

3:List的特有功能(掌握)
        (1)List的特点
                List是Collection接口下的一个子接口
                        特点:元素有序(指的是存储顺序和取出顺序是否一致),可重复。
                Set也是Collection接口下的一个子接口
                        特点:元素无序,唯一。

        (1)List的特有功能
                1、添加功能
                        void add(int index,Object obj): 在指定位置添加元素。
                2、删除功能
                        Object remove(int index): 根据指定索引删除元素,并把删除的元素返回
                3、修改功能
                        Object set(int index,Object obj):把指定索引位置的元素修改为指定的值,返回修改前的值。
                4、获取功能
                        Object get(int index): 获取指定位置的元素
                        int indexOf(Object obj): 返回指定元素在集合中第一次出现的索引。
                        ListIterator listIterator():
                5、截取功能
                        List subList( int fromIndex, int toIndex )截取集合。
        (2)List的遍历方式
                1、Iterator迭代器
                2、ListIterator迭代器(了解)
                3、普通for+get()
        (3)ListIterator迭代器
                ConcurrentModificationException并发修改异常
                ConcurrentModificationException
                ①:为什么出现这个异常:因为我们在用迭代器遍历的时候,通过集合对元素进行了操作
                ②:如何解决呢:
                        A:通过迭代器遍历的时候,我们用迭代器进行操作集合元素
                                ListIterator
                        B:普通for循环遍历集合的时候,我们通过集合对元素进行操作
       
作者: 水壶vs兔子    时间: 2015-6-30 09:07
正好学到迭代器,非常不错的总结,学习了!
作者: 懒锋2015    时间: 2015-6-30 09:18
支持总结发帖
作者: Huan220_欢    时间: 2015-6-30 10:19
复习中.........
作者: 1958078929    时间: 2015-6-30 14:22
谢谢分享
作者: 改变    时间: 2015-6-30 15:25
回味中...
作者: zuopiezi    时间: 2015-6-30 16:48
嗯。。学习了。。。。。。。。。
作者: 为明天而奋斗    时间: 2015-6-30 17:12
我想进黑马
作者: 徐家誉    时间: 2015-6-30 23:01
水壶vs兔子 发表于 2015-6-30 09:07
正好学到迭代器,非常不错的总结,学习了!

哪一期的啊?
作者: 徐家誉    时间: 2015-6-30 23:02
为明天而奋斗 发表于 2015-6-30 17:12
我想进黑马

加油  加油
作者: 如初见    时间: 2015-6-30 23:29
老乡,你总结的真不错那。顶一下
作者: 水壶vs兔子    时间: 2015-7-1 08:16
徐家誉 发表于 2015-6-30 23:01
哪一期的啊?

哪期都不是,还是自学期!:P
作者: 爱李萝卜    时间: 2015-7-1 09:55
总结的很好,加油




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