Collection 接口定义了存取一组对象的方法,其子接口Set和List分别定义了储存方式。
Set中的数据对象没有顺序并且不可以重复。
List的数据对象有顺序并且可以重复。
容器类对象在调用renove,contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法。对于自定义的类型,需要重写equals和hashCode方法以实现自定义的对象相等规则。
例如:public boolean equals(object obj) {
if(obj instanceof Name) {
Name name = (Name) obj;
return (firstName.equals(name.firstName))&&(lastName.equals.lastName);
}
return super.equals(obj);
}
public int hashCode() {
return firstName;
}
注意:相等的对象应具有相等的hashCodes。
Iterator 接口
所有实现了 Collection接口的容器类都有一个iterator方法用以返回一个实现Iterator接口的对象。Iterator对象称为迭代器用以用以方便实现对容器内元素的遍历操作。而remove方法是Iterator对象在迭代过程中删除元素唯一的安全方法。
例如:
...........
Collection c= new HashSet();
c.add(new Name("eeee1","1111");
c.add(new Name("f1","11");
c.add(new Name("eee1","1111");
for(Iterator i = c.iterator();i.hashNext();) {
Name name = (Name) i.next();
if(name.getFirstName().length<3) {
i.remove();
}
}
System.out.println((c);
Set 接口
Set接口是Collection的子接口,Set接口没有提供额外的方法,但实现Set容器类中的元素是没有顺序并且不可以重复的。Set容器我们可以把它看作数学中"集合"的概念来理解。
例如:
public static void main (String[] args) {
Set s1 = new HashSet();
Set s2 = new HashSet();
s1.add("a"); s1.add("b"); s1.add("c");
s2.add("d"); s2.add("a"); s2.add("b");
Set sn = new HashSet(s1) ; //把s1中的所有元素全部拷贝到sn中;
sn.retainAll(s2); //求sn与s2的交集;
Set su = new HashSet(s1);
su.addAll(s2); //把s2中所有的元素添加到su中;
System.out.println(sn);
System.out.println(su);
}