天天看点

Collection接口

 在java.util包中提供了一些集合类,常用的有List、Set和Map类,其中List类和Set类继承了Collection接口。这些集合类又称为容器,它们与数组不同,数组的长度是固定的,而集合的长度是可变的,数组用来存放基本数据类型的数据,集合用来存放类对象的引用。

List接口、Set接口、Map接口以及Collection接口的主要特征如下:

● Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用。

● List接口继承了Collection接口,List接口允许存放重复的对象,排序方式为按照对象的插入顺序。

● Set接口继承了Collection接口,Set接口不允许存放重复的对象,排序方式为按照自身内部的排序规则。

● Map接口以键值对(key—value)的形式存放对象,其中键(key)对象不可以重复,值(value)对象可以重复,排序方式为按照自身内部的规则。

上述集合类的继承关系如下图1所示:

Collection接口

2、Collection接口

Collection接口是List接口和Set接口的父接口,通常情况下不被直接使用,不过Collection接口中定义了一些通用的方法,通过这些方法可以实现对集合的基本操作,因为List接口和Set接口继承了Collection接口,所以这些方法对List集合和Set集合是通用的,Collection接口定义的常用方法及功能如下表1所示:

Collection接口

(1)addAll(Collection<? extends E> col)方法

addAll(Collection<?

extends E>

col)方法用来将指定集合中的所有对象添加到该集合中。如果对该集合进行了泛化,则要求指定集合中的所有对象都符合泛化类型,否则在编译程序时将抛出异常,入口参数中的“<?

extends E>”说明了这个问题,其中的E为用来泛化的类型。

例如:

import java.util.*;  
public class TestCollection{  
    public static void main(String args[]){  
        String a = "A";  
        String b = "B";  
        String c = "C";  
        Collection<String> list1 = new ArrayList<String>();  
        list1.add(a);//通过add(E obj)方法添加指定的对象到集合中  
        list1.add(b);  
        Collection<String> list2 = new ArrayList<String>();  
        list2.addAll(list1);//通过addAll(Collection<? extends E> col)方法添加指定集合中的所有对象到该集合中  
        list2.add(c);  
        Iterator<String> it = list2.iterator();//通过iterator()方法序列化集合中的所有对象  
        while(it.hasNext()){  
            String s = it.next();//因为对实例it进行了泛化,所以不需要进行强制类型转换  
            System.out.println(s);  
        }  
    }  
}      

程序运行结果如下:

A

B

C

注意:由于Collection是接口,不能直接对其进行实例化,而ArrayList类是Collection接口的间接实现类,因此可以通过ArrayList类实现Collection的实例化。

(2)removeAll(Collection<?> col)方法

removeAll(Collection<>> col)方法用来从该集合中移除同时包含在指定集合中的对象,与retainAll()方法正好相反。返回值为boolean型,如果存在符合移除条件的对象则返回True,否则返回False。

String a = "A";  
String b = "B";  
String c = "C";  
Collection<String> list1 = new ArrayList<String>();  
list1.add(a);  
list1.add(b);  
Collection<String> list2 = new ArrayList<String>();  
list2.add(b);//注释该行,再运行  
list2.add(c);  
boolean isContains = list1.removeAll(list2);  
System.out.println("是否存在符合移除条件的对象:"+isContains);  
Iterator<String> it = list1.iterator();  
System.out.println("list1中的对象如下:");  
while(it.hasNext()){  
    String s = it.next();  
    System.out.println(s);  
}      

程序运行结果1:(没有注释掉list2.add(b);)

是否存在符合移除条件的对象:true

list1中的对象如下:

程序运行结果2:(注释掉了list2.add(b);)

是否存在符合移除条件的对象:false

(3)retainAll(Collection<?> col)方法

retainAll(Collection<?> col)方法仅保留该集合中同时包含在指定集合中的对象,其他的全部移除,与removeAll()方法正好相反。返回值boolean型,如果存在符合移除条件的对象则返回True,否则返回False。

String a = "A";  
String b = "B";  
String c = "C";  
Collection<String> list1 = new ArrayList<String>();  
list1.add(a);//注释该行,再运行  
list1.add(b);  
Collection<String> list2 = new ArrayList<String>();  
list2.add(b);  
list2.add(c);  
boolean isContains = list1.retainAll(list2);  
System.out.println("是否存在符合移除条件的对象:"+isContains);  
Iterator<String> it = list1.iterator();  
System.out.println("list1中的对象如下:");  
while(it.hasNext()){  
    String s = it.next();  
    System.out.println(s);  
}      

程序运行结果1:(没有注释掉list1.add(a);)

程序运行结果2:(注释掉了list1.add(a);)

(4)containsAll(Collection<?> col)方法

containsAll(Collection<?> col)方法用来查看在该集合中是否存在指定集合中的所有对象。返回值为boolean型,如果存在则返回True,否则返回False。

String a = "A";  
String b = "B";  
String c = "C";  
Collection<String> list1 = new ArrayList<String>();  
list1.add(a);  
list1.add(b);  
Collection<String> list2 = new ArrayList<String>();  
list2.add(b);  
list2.add(c);//注释该行,再运行  
boolean isContains = list1.containsAll(list2);  
System.out.println("list1中是否存在list2中的所有对象:"+isContains);      
String a = "A";  
String b = "B";  
String c = "C";  
Collection<String> list1 = new ArrayList<String>();  
list1.add(a);  
list1.add(b);  
list1.add(c);  
String s1[] = new String[1];  
String s2[] = list1.toArray(s1);  
System.out.println("数组s2中的元素如下:");  
for(int i=0;i<s2.length;i++){  
    System.out.println(s2[i]);  
}      

继续阅读