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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 菜鸟哥 中级黑马   /  2015-7-25 22:21  /  1285 人查看  /  23 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文


 集合框架
先看下面的图:

这就是集合框架的构成。由于数据结构的不同,有不同的集合,也叫容器。下面是集合类的简单介绍。
 
一、为什么出现集合类?
        面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。
 
二、数组和集合类同是容器,有何不同?
        数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
 
三、集合类的特点
        集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
 
第二讲     Collection
        Collection是集合框架中的常用接口。其下有两个子接口:List(列表),Set(集)。
       所属关系:
            Collection
                     |--List//元素是有序的,元素可以重复。因为该集合体系有索引。
                     |--Set//元素是无序的,元素不可以重复。
 
一、Collection接口中的常见操作
1、添加元素
        add(Objectobj); //add方法的参数类型是Object。以便于接收任意类型对象。
2、删除元素
        remove(Objectobj);
        removeAll(另一集合);//调用者只保留另一集合中没有的元素。
        clear();//清空集合
3、判断元素
        contains(Objectobj);//判断是否存在obj这个元素
        isEmpty();//是否为空
4、获取个数,集合长度
        size();
5、取交集
        retainAll(另一集合);//调用者只保留两集合的共性元素。
注:集合中存储的都是对象的引用(地址)。
 
二、迭代
1、概述
        迭代是取出集合中元素的一种方式。
        对于集合的元素取出这个动作:
        当不足以用一个函数来描述,需要用多个功能来体现,所以就将取出这个动作封装成一个对象来描述。就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素。那么取出方式就被定义成了内部类。
        而每一个容器的数据结构不同,所以取出的动作细节也不一样。但是都具有共性内容: 判断和取出。那么就可以将这些共性抽取。
         那么这些内部类都符合一个规则(或者说都抽取出来一个规则)。该规则就是Iterator。通过一个对外提供的方法:iterator();,来获取集合的取出对象。
         因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器。
 
2、迭代的常见操作
        hasNext();//有下一个元素,返回真
        next();//取出下一个元素
        remove();//移除
注:在迭代时循环中next调用一次,就要hasNext判断一次。
使用:
         ArrayList a=newArrayList();//创建一个集合
        Iteratorit=a.iterator();//获取一个迭代器,用于取出集合中的元素。
        第一种打印方式:
                for(Iterator iter = a.iterator();iter.hasNext();  )
                {
                           System.out.println(iter.next());
                }
       第二种打印方式:
                 Iteratoriter = a.iterator();
                while(iter.hasNext())
               {
                           System.out.println(iter.next());
               }
3、迭代注意事项
迭代器在Collcection接口中是通用的,它替代了Vector类中的Enumeration(枚举)。
迭代器的next方法是自动向下取元素,要避免出现NoSuchElementException。
迭代器的next方法返回值类型是Object,所以要记得类型转换。
 
第三讲     List
一、List
组成
        List:元素是有序的,元素可以重复。因为该集合体系有索引。
            |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
            |--LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
            |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
 
二、List的特有方法
        凡是可以操作角标的方法都是该体系特有的方法。
1、增
        booleanadd(index,element);//指定位置添加元素
        BooleanaddAll(index,Collection);//在指定位置增加给定集合中的所有元素,若省略位置参数,则在当前集合的后面依次添加元素
2、删
        Booleanremove(index);//删除指定位置的元素
3、改
        set(index,element);//修改指定位置的元素。
4、查
        get(index);//通过角标获取元素
        subList(from,to);//获取部分对象元素
5、其他
        listIterator();//List特有的迭代器
        indexOf(obj);//获取元素第一次出现的位置,如果没有则返回-1
注:List集合判断元素是否相同,移除等操作,依据的是元素的equals方法。
 
三、ListIterator
1、概述 
        ListIterator是List集合特有的迭代器,是Iterator的子接口。
       在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。所以在迭代器时,只能用迭代器的方法操作元素。可是Iterator方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要其他的操作,如添加、修改等,就需要使用其子接口:ListIterrator。该接口只能通过List集合的ListIterator方法获取。
2、ListIterator特有的方法
        add(obj);//增加
        set(obj);//修改为obj
        hasPrevious();//判断前面有没有元素
        previous();//取前一个元素
 
四、枚举Enumeration
枚举:
        就是Vector特有的取出方式。Vector有三种取出方式。
        其实枚举和迭代是一样的。因为枚举的名称以及方法的名称都过长。所以被迭代器取代了。
特有方法:
         addElement(obj);//添加元素,相当于add(obj);
         Enumerationelements();//Vector特有取出方式(枚举)
         hasMoreElements();//相当于Iterator的hasNext()方法
         nextElements();//相当于Iterator的next()方法
例:  
[java] view plaincopy
1.Vector v=new Vector();  
2.    for(Enumeration e=v.elements();e.hasMoreElements();)  
3.{  
4.    System.out.println(e.nextElements());  
5.}  
 
五、LinkedList
        LinkedList:底层使用的是链表数据结构。特点:增删速度很快,查询稍慢。
特有方法:
1、增
        addFirst();
        addLast();
2、获取
        //获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
        getFirst();
        getLast();
3、删
        //获取元素,并删除元素。如果集合中没有元素,会出现NoSuchElementException
        removeFirst();
        removeLast();
在JDK1.6以后,出现了替代方法。
1、增
        offFirst();
        offLast();
2、获取
        //获取元素,但是不删除。如果集合中没有元素,会返回null。
        peekFirst();
        peekLast();
3、删
        //获取元素,并删除元素。如果集合中没有元素,会返回null。
        pollFirst();
        pollLast();
示例:
[java] view plaincopy
1./* 
2.使用LinkedList模拟一个堆栈或者队列数据结构。 
3. 
4.堆栈:先进后出  如同一个杯子。 
5.队列:先进先出 First in First out  FIFO 如同一个水管。 
6. 
7.*/  
8.import java.util.*;  
9.  
10.class LinkedListTest  
11.{  
12.    public static void main(String[] args)   
13.    {  
14.        LinkedList l=new LinkedList();  
15.        l.addFirst("java01");  
16.        l.addFirst("java02");  
17.        l.addFirst("java03");  
18.        l.addFirst("java04");  
19.        l.addFirst("java05");  
20.      
21.        //堆栈输出  
22.    //  stack(l);  
23.          
24.        //队列输出  
25.        queue(l);  
26.  
27.    }  
28.  
29.    //堆栈  
30.    public static void stack(LinkedList l)  
31.    {  
32.        while (!l.isEmpty())  
33.        {  
34.            sop(l.removeFirst());  
35.        }  
36.    }  
37.  
38.    //队列  
39.    public static void queue(LinkedList l)  
40.    {  
41.        while(!l.isEmpty())  
42.        {  
43.            sop(l.removeLast());  
44.        }  
45.    }  
46.  
47.    //输出  
48.    public static void sop(Object obj)  
49.    {  
50.        System.out.println(obj);  
51.    }  
52.}  
 

23 个回复

倒序浏览
挺全面,收藏
回复 使用道具 举报
总结的不错,学习饿了
回复 使用道具 举报
总结的很不错啊
回复 使用道具 举报
全面,以复制收藏。。正好复习了
回复 使用道具 举报
总结的不错
回复 使用道具 举报
养成了先预习后看视频的习惯。。
回复 使用道具 举报
感谢  ..加油哈/..
回复 使用道具 举报
非常感谢,我也学到集合了,加油哦。
回复 使用道具 举报
已经收藏了,lz代码最好用插入的方式会好看点
回复 使用道具 举报

希望能帮助你
回复 使用道具 举报
umbriel 发表于 2015-7-25 23:56
总结的不错,学习饿了

我准备考黑马了
回复 使用道具 举报

还好还好
回复 使用道具 举报
秀丽xl 发表于 2015-7-26 00:17
全面,以复制收藏。。正好复习了

回头再发
回复 使用道具 举报

还好,还好
回复 使用道具 举报
孙晓磊 发表于 2015-7-26 13:37
养成了先预习后看视频的习惯。。

哈哈,是一种好的学习方法
回复 使用道具 举报
黄新宇 发表于 2015-7-26 16:24
已经收藏了,lz代码最好用插入的方式会好看点

嗯嗯,是啊
回复 使用道具 举报
过来看看,这两天都一直在学习集合的内容啊
回复 使用道具 举报
学习的确需要总结,理顺思路
回复 使用道具 举报
袁月明 发表于 2015-7-27 00:11
学习的确需要总结,理顺思路

准备9月进黑马,现在在走流程
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马