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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© jk7130866 中级黑马   /  2015-7-27 21:25  /  181 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

集合框架用来方便管理对象,集合框架 被设计成包含一组标准的接口。 对这些接口, 提供了几个标准的实现类。通常就是这样使用的,如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可以使你自己的类集实现更加容易。比如用LinkedList实现堆栈或队列结构。        学习这个体系,就先看看,顶层的接口,学会了顶层的用法就学会了这个体系的基本功能。这个顶层就是Collection接口。他有两个常用的子类List和Set。List有三个常用的实现类ArrayList,LinkedList,Vector.Set接口常用的实现类HashSet,TreeSet。为什么有这么多的容器呢?因为他们的数据结构不同。
        现在来学习一下Collection接口的共性方法。一个容器对象,一般想来会提供什么方法,不多说,增删改查。好来具体实现一下吧。选择ArrayList实现类来使用把。
Collection                   //1、添加元素
                        arrayList.add("a1dasd");//add方法可以传任意对象。接受Object多态的体现。
                        arrayList.add("a2dasd");
                        arrayList.add("a3dasd");
                        arrayList.add("a4dasd");
                        arrayList.add("a5dasd");
                   //2、获得长度
               System.out.println(arrayList.size());//打印结果5
过个对象添加就集合了。Collection引用也可以实现因为这些都是Collection内定义的共性方法。对象是怎么存进集合的呢?首先栈里一个引用arrayList,堆里开辟一个 ArrayList对象,集合中存放的不是对象实体,而是一个个地址。add方法的参数类型是Object以便于接收任意类型的对象。
                //3、删除
                arrayList.remove("a5dasd");
                System.out.println(arrayList.size());//结果为4
                arrayList.clear();//清空
                System.out.println(arrayList.size());//结果为0

很简单不用多说。
          //4、判断是否存在,判断是否为空
                System.out.println(arrayList.contains("a3dasd"));
                System.out.println(arrayList.isEmpty());
         //5、交集新建一个集合,添加数据
                ArrayList arrayList=new ArrayList();
                ArrayList arrayList2=new ArrayList();
               
                        arrayList.add("a1dasd");
                        arrayList.add("a2dasd");
                        arrayList.add("a3dasd");
                        arrayList.add("a4dasd");
                        arrayList.add("a5dasd");
                        arrayList2.add("a4dasd");
                        arrayList2.add("a5dasd");
                        arrayList2.add("a6dasd");
                        arrayList2.add("a7dasd");
                       
                 arrayList.retainAll(arrayList2);//取交集,arrayList只保留和arrayList2相同的元素
                 System.out.println(arrayList);//看结果[a4dasd, a5dasd]

如果arrayList2中么没有和arrayList相同的元素arrayList就为空。还有一个removall方法。它的效果是去掉相同元素,就不多说了。重开一个文件看看怎么取出元素,Collection中有一个iterator()方法,他返回一个Iterator接口他有三个方法,hasNext()、next()、remove(),这个接口的子类对象不是new出来的,而是通过iterator()方法获得的。看看我的源代码
public class Demo {

        public static void main(String[] args) {
                //创建一个集合容器,使用Collection接口方法。
                ArrayList arrayList=new ArrayList();
                arrayList.add("a2dasd");
                        arrayList.add("a3dasd");
                        arrayList.add("a4dasd");
                        Iterator iterator=arrayList.iterator();//获取迭代器,用于取出集合中的元素
                       
                        while(iterator.hasNext()){//hasNext()用于判断集合中是否有元素
                                System.out.println(iterator.next());//next()取出元素       
                        }  
        }               
}
这就是集合中取出元素的方法,这部分代码可以稍微优化用for循环代替while
       for(Iterator it=arrayList.iterator();it.hasNext();){
                                System.out.println(it.next());
                                }

因为iterator用完就不需要了所以定义在for循环中可以接收内存。好了还是继续说迭代器,对于每个结合的实现子类,他们的数据结构不同,比如ArrayList底层是数组,LinkedList底层是链表。那么他们操作数据的方法肯定不同。迭代器是怎么实现的呢。其实我们把遍历结合元素的方法抽取出来,共同的三种方法,定义成一个规则,就是Iterator接口和它的三个方法。然后每个集合实现类,再自己内部定义类实现这个接口,并实现这三个方法。至于实现的具体细节,根据自己的数据结构来定。我使用只要通过Iterator接口引用他们iterator()返回的对象。就可以实现这三个基本功能了。


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马