public interface Collection<E> extends Iterable<E> {
/**
返回集合中元素的数量,最大值为Integer.MAX_VALUE
*/
int size();
/**
如果集合为空返回true
*/
boolean isEmpty();
/**
如果集合中含有该对象返回true
*/
boolean contains(Object o);
/**
返回一个遍历集合中所有元素的迭代器,不保证顺序
用Iterator模式实现遍历集合
for(int i=0; i<array.size(); i++) {// TODO: array.get(i) ...}
客户端都必须事先知道集合的内部结构,访问代码和集合本身是紧耦合,无法将访问逻辑从集合类和客户端代码中分离出来,每一种集合对应一种遍历方法,客户端代码无法复用。
更恐怖的是,如果以后需要把ArrayList更换为LinkedList,则原来的客户端代码必须全部重写。
为解决以上问题,Iterator模式总是用同一种逻辑来遍历集合:
for(Iterator it = c.iterater(); it.hasNext(); ) { ... }
奥秘在于客户端自身不维护遍历集合的”指针”,所有的内部状态(如当前元素位置,是否有下一个元素)都由Iterator来维护,而这个Iterator由集合类通过工厂方法生成,因此,它知道如何遍历整个集合。
客户端从不直接和集合类打交道,它总是控制Iterator,向它发送”向后”,”取当前元素”的命令,就可以间接遍历整个集合。
JDK1.5中,还对上面的代码在语法上作了简化:
for(Type t : c) {
// 对t的操作...
}
}
*/
Iterator<E> iterator();
/**
该方法是集合转换成对象数组的桥梁,返回的数组不再引用该集合,调用方可以修改,返回的顺序与集合迭代器顺序一致
*/
Object[] toArray();
/**
* @throws ArrayStoreException 如果运行时a的类型不是等于或是集合中元素的超类
* @throws NullPointerException a==null
返回的Object[]仍然是把集合的所有元素变成的数组,但是类型和参数a的类型是相同的,比如执行:String[] a = new String[0];String[] y = x.toArray(a);其次,如果参数a的大小装不下集合的所有元素,返回的将是一个新的数组。如果参数a的大小能装下集合的所有元素,则返回的还是a,但a的内容用集合的元素来填充。尤其要注意的是,如果a的大小比集合元素的个数还多,a后面的部分全部被置为null
*/
<T> T[] toArray(T[] a);
/**
* @throws UnsupportedOperationException 如果未实现
* @throws ClassCastException 若类型不符
* @throws NullPointerException 若特定集合不允许添加null
* @throws IllegalArgumentException
* @throws IllegalStateException
添加一个新元素。注意这个方法会返回一个boolean,但是返回值不是表示添加成功与否。 Collection规定:如果一个集合拒绝添加这个元素,无论任何原因,都必须抛出异常。这个返回值表示的意义是add()方法执行后,集合的内容是否改变了(就是元素有无数量,位置等变化),这是由具体类实现的。即:如果方法出错,总会抛出异常(这样保证了执行完这个方法后,该元素就在集合中了);返回值仅仅表示该方法执行后这个Collection的内容有无变化。
类似的方法:
boolean addAll(Collection c);
boolean remove(Object o);
boolean removeAll(Collection c);
boolean remainAll(Collection c);
*/
boolean add(E e);
/**
如果集合中有o对象,则删除一个,返回true,否则返回false
list.remove((Object)2);//删除值为2的
list.remove(2);//删除第三个元素
*/
boolean remove(Object o);
/**
若含有集合c中的所有元素返回true
*/
boolean containsAll(Collection<?> c);
/**
添加集合c中到本集合中
*/
boolean addAll(Collection<? extends E> c);
/**
删除本集合中所有也在c集合的元素,操作后,本集合与c集合无交集
*/
boolean removeAll(Collection<?> c);
/**
删除本集合中所有不在c集合的元素,操作后,本集合只保留与c集合的交集
*/
boolean retainAll(Collection<?> c);
/**
清空本集合
*/
void clear();
/**
* @see equals&&hashCode方法的最佳实践
*/
boolean equals(Object o);
/**
*/
int hashCode();
}
没有评论:
发表评论