`
yde986
  • 浏览: 98027 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java集合类详解(二):Collection

阅读更多

1、Collection
1.1、常用方法
     Collection 接口用于表示任何对象或元素组。想要尽可能以常规方式处理一组元素时,就使用这一接口。Collection 在前面的大图也可以看出,它是List和Set 的父类。并且它本身也是一个接口。它定义了作为集合所应该拥有的一些方法。如下:
     注意:
     集合必须只有对象,集合中的元素不能是基本数据类型。
     Collection接口支持如添加和除去等基本操作。设法除去一个元素时,如果这个元素存在,除去的仅仅是集合中此元素的一个实例。
     boolean add(Object element)
     boolean remove(Object element)
Collection 接口还支持查询操作:
     int size()
     boolean isEmpty()
     boolean contains(Object element)
     Iterator iterator()
组操作 :Collection 接口支持的其它操作,要么是作用于元素组的任务,要么是同时作用于整个集合的任务。
     boolean containsAll(Collection collection)
     boolean addAll(Collection collection)
     void clear()
     void removeAll(Collection collection)
     void retainAll(Collection collection) 
     containsAll() 方法允许您查找当前集合是否包含了另一个集合的所有元素,即另一个集合是否是当前集合的子集。其余方法是可选的,因为特定的集合可能不支持集合更改。 addAll() 方法确保另一个集合中的所有元素都被添加到当前的集合中,通常称为并。 clear() 方法从当前集合中除去所有元素。 removeAll() 方法类似于 clear() ,但只除去了元素的一个子集。 retainAll() 方法类似于 removeAll() 方法,不过可能感到它所做的与前面正好相反:它从当前集合中除去不属于另一个集合的元素,即交。

     我们看一个简单的例子,来了解一下集合类的基本方法的使用:

 

import java.util.*;

public class CollectionToArray {

   public static void main(String[] args) {

      Collection collection1 = new ArrayList();// 创建一个集合对象

      collection1.add("000");// 添加对象到Collection集合中

      collection1.add("111");

      collection1.add("222");

      System.out.println("集合collection1的大小:" + collection1.size());

      System.out.println("集合collection1的内容:" + collection1);

      collection1.remove("000");// 从集合collection1中移除掉 "000" 这个对象

      System.out.println("集合collection1移除 000 后的内容:" + collection1);

      System.out.println("集合collection1中是否包含000 "  + collection1.contains("000"));

      System.out.println("集合collection1中是否包含111 "  + collection1.contains("111"));

      Collection collection2 = new ArrayList();

      collection2.addAll(collection1);// collection1 集合中的元素全部都加到collection2

      System.out.println("集合collection2的内容:" + collection2);

      collection2.clear();// 清空集合 collection1 中的元素

      System.out.println("集合collection2是否为空 " + collection2.isEmpty());

      // 将集合collection1转化为数组

      Object s[] = collection1.toArray();

      for (int i = 0; i < s.length; i++) {

        System.out.println(s[i]);

      }

   }

}

 

 

     运行结果为:
     集合collection1的大小:3
     集合collection1的内容:[000, 111, 222]
     集合collection1移除 000 后的内容:[111, 222]
     集合collection1中是否包含000 :false
     集合collection1中是否包含111 :true
     集合collection2的内容:[111, 222]
     集合collection2是否为空 :true
     111
     222
     这里需要注意的是,Collection 它仅仅只是一个接口,而我们真正使用的时候,确是创建该接口的一个实现类。做为集合的接口,它定义了所有属于集合的类所都应该具有的一些方法。

     这里需要一提的是,因为Collection的实现基础是数组,所以有转换为Object数组的方法:
     Object[] toArray() 
     Object[] toArray(Object[] a)
     其中第二个方法Object[] toArray(Object[] a) 的参数 a 应该是集合中所有存放的对象的类的父类。
1 .2、迭代器
     任何容器类,都必须有某种方式可以将东西放进去,然后由某种方式将东西取出来。毕竟,存放事物是容器最基本的工作。对于ArrayList,add()是插入对象的方法,而get()是取出元素的方式之一。ArrayList很灵活,可以随时选取任意的元素,或使用不同的下标一次选取多个元素。
     如果从更高层的角度思考,会发现这里有一个缺点:要使用容器,必须知道其中元素的确切类型。初看起来这没有什么不好的,但是考虑如下情况:如果原本是ArrayList ,但是后来考虑到容器的特点,你想换用Set ,应该怎么做?或者你打算写通用的代码,它们只是使用容器,不知道或者说不关心容器的类型,那么如何才能不重写代码就可以应用于不同类型的容器?
     所以迭代器(Iterator)的概念,也是出于一种设计模式就是为达成此目的而形成的。所以Collection不提供get()方法。如果要遍历Collectin中的元素,就必须用Iterator。
     迭代器(Iterator)本身就是一个对象,它的工作就是遍历并选择集合序列中的对象,而客户端的程序员不必知道或关心该序列底层的结构。此外,迭代器通常被称为“轻量级”对象,创建它的代价小。但是,它也有一些限制,例如,某些迭代器只能单向移动。
     Collection 接口的 iterator() 方法返回一个 Iterator。Iterator 和您可能已经熟悉的 Enumeration 接口类似。使用 Iterator 接口方法,您可以从头至尾遍历集合,并安全的从底层 Collection 中除去元素。
     下面,我们看一个对于迭代器的简单使用:

import java.util.ArrayList;

import java.util.Collection;

import java.util.Iterator;

public class IteratorDemo {

public static void main(String[] args) {

Collection collection = new ArrayList();

collection.add("s1");

collection.add("s2");

collection.add("s3");

Iterator iterator = collection.iterator();//得到一个迭代器

while (iterator.hasNext()) {//遍历

Object element = iterator.next();

System.out.println("iterator = " + element);

}

if(collection.isEmpty())

System.out.println("collection is Empty!");

else

System.out.println("collection is not Empty! size="+collection.size());

Iterator iterator2 = collection.iterator();

while (iterator2.hasNext()) {//移除元素

Object element = iterator2.next();

System.out.println("remove: "+element);

iterator2.remove();

}

Iterator iterator3 = collection.iterator();

if (!iterator3.hasNext()) {//察看是否还有元素

System.out.println("还有元素");

}

if(collection.isEmpty())

System.out.println("collection is Empty!");

//使用collection.isEmpty()方法来判断

}

}

    程序的运行结果为:
    iterator = s1
    iterator = s2
    iterator = s3
    collection is not Empty! size=3
    remove: s1
    remove: s2
    remove: s3
    还有元素
    collection is Empty!
    可以看到,Java的Collection的Iterator 能够用来,:
    1) 使用方法 iterator() 要求容器返回一个Iterator .第一次调用Iterator 的next() 方法时,它返回集合序列的第一个元素。
    2) 使用next() 获得集合序列的中的下一个元素。
    3) 使用hasNext()检查序列中是否元素。
    4) 使用remove()将迭代器新返回的元素删除。
    需要注意的是:方法删除由next方法返回的最后一个元素,在每次调用next时,remove方法只能被调用一次 。
    大家看,Java 实现的这个迭代器的使用就是如此的简单。Iterator(跌代器)虽然功能简单,但仍然可以帮助我们解决许多问题,同时针对List 还有一个更复杂更高级的ListIterator。您可以在下面的List讲解中得到进一步的介绍。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics