集合框架用来方便管理对象,集合框架 被设计成包含一组标准的接口。 对这些接口, 提供了几个标准的实现类。通常就是这样使用的,如果你愿意的话,也可以实现你自己的类集。为了方便起见,创建用于各种特殊目的的实现工具。一部分工具可以使你自己的类集实现更加容易。比如用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()返回的对象。就可以实现这三个基本功能了。
|
|