容器的概念
装载其他各种各样对象的这样一种容器,数组就是一种容器,
Collection接口
Collection接口定义了存储一组对象的方法,其子接口Set和List分别定义了存储方式。
Set中的数据对象没有顺序切不可重复。
List中的数据对象有顺序切可以重复。
Collection接口定义的一些方法:
int size()
- 返回此 collection 中的元素数。如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。
boolean isEmpty()
- 如果此 collection 不包含元素,则返回 true。
boolean contains(Object o)
- 如果此 collection 包含指定的元素,则返回 true。更确切地讲,当且仅当此 collection 至少包含一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,返回 true。
Iterator<E> iterator()
- 返回在此 collection 的元素上进行迭代的迭代器。关于元素返回的顺序没有任何保证(除非此 collection 是某个能提供保证顺序的类实例)。
boolean add(E e)
- 确保此 collection 包含指定的元素(可选操作)。如果此 collection 由于调用而发生更改,则返回 true。(如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。)
boolean remove(Object o)
- 从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。更确切地讲,如果此 collection 包含一个或多个满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除这样的元素。如果此 collection 包含指定的元素(或者此 collection 由于调用而发生更改),则返回 true 。
boolean containsAll(Collection<?> c)
- 如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean addAll(Collection<? extends E> c)
- 将指定 collection 中的所有元素都添加到此 collection 中(可选操作)。如果在进行此操作的同时修改指定的 collection,那么此操作行为是不确定的。(这意味着如果指定的 collection 是此 collection,并且此 collection 为非空,那么此调用的行为是不确定的。)
boolean removeAll(Collection<?> c)
- 移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。此调用返回后,collection 中将不包含任何与指定 collection 相同的元素。
void clear()
- 移除此 collection 中的所有元素(可选操作)。此方法返回后,除非抛出一个异常。
boolean equals(Object o)
- 比较此 collection 与指定对象是否相等。
下面是一个简单的例子:
import java.util.*;
public class Test {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("hello");
c.add("100");
c.add(10);
System.out.println(c.size());
System.out.println(c);
}
}
容器类对象在调用remove、contains等方法时需要比较对象是否相等,这会涉及对象类型的equals方法和hashCode方法;对于自定义类型,需要重写equals方法和hashCode方法以实现自定义的对象相等规则。
Iterator接口
所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。
Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历。
Iterator接口定义了如下的方法:
boolean hasNext()
- 如果仍有元素可以迭代,则返回 true。(换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。
next()
- 返回迭代的下一个元素。
void remove()
- 从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。
例如:
import java.util.*;
public class Test {
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("a");
c.add("100");
c.add(10);
Iterator t = c.iterator();
while(t.hasNext()){
System.out.println(t.next());
}
}
}
Iterator对象的remove方法是在迭代过程中删除元素的唯一的安全方法。
set接口
Set接口是Collection的子接口,Set接口没有提供额外的方法,但实现Set接口的容器类中的元素是没有顺序的,而且不可重复。
实现Set容器的类有HashSet,TreeSet等。
如:
import java.util.*;
public class HashSetTest {
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("e");s2.add("c");s2.add("a");
Set sn=new HashSet(s1);
sn.retainAll(s2);
Set su=new HashSet(s1);
su.addAll(s2);
System.out.println(sn);
System.out.println(su);
}
如有遗漏 欢迎补充