集合
在java类库中,集合类的基本接口是Colloction接口。这个接口中有两个基本方法:
public interface Colloction<E>{
boolead add(E element);\\向集合中添加元素
Iterator<E> interator();\\返回一个实现了Iterator接口的对象,可以使用这个迭代器对象依此访问集合中的元素
}
思考:接口中的add方法有个boolead型的返回值,当添加成功的时候返回true,否则返回true,书中说集中不准许有重复的对象,但我们知道数据类型中是有些可以存放重复数据的,在这里引做思考,后文中会有解答。
迭代器
Iterator接口包括4个方法
public interface Iterator<E>{
E next();\\多次调用可以依次读取集合中的元素。末尾调用会返回NoSuchElementException异常
boolead hasNext();\\返回是否可以调用next()方法
void remove();
default void forEachRemaining(Consumer<? super E> action);
\\最后一个为默认方法,提供一个lambda表达式,将对迭代器的每一个元素调用这个lambda表达式,直到没有元素为止
\\iterator.forEachRamaining(element->do something with element)
}
注:强调一下remove()方法,该方法将会删除上次调用next()方法是返回的元素,这一点在链表一节中会有详细介绍,next()和remove()方法的调用具有相互依赖性。调用remove之前必须调用了next。
不难发现,在以上介绍中,说的都是接口一词,而不是类或者对象,接口并不能通过new一个对象,不过接口变量可以赋值一个实现了这个接口的类的对象,在后文的代码中可以看到。
Colloction<String> c = ...;\\定义一个集合,接口变量赋值实现接口的类的对象,在实际运用中很少见这样的形式
Iterator<String> iter = c.iterator();\\定义一个接口变量,通过集合的iterator()方法得到实现这个接口的类的对象
while(iter.hasNext()){
String element = iter.next();
do something with element
}
以下给出一些常用的方法
API java.util.Collection<E>1.2
Iterator<E> iterator()
返回该集合的迭代器对象
int size()
返回集合存储的元素个数
boolean isEmpty()
集合中是否包含元素
boolean contains(Object obj)
如果集合中包含了一个与obj相等的对象,返回true
boolean containsAll(Collection<?> other)
如果集合包含other集合中的所有元素,返回true
boolean add(Object element)
添加元素
boolean addAll(Collection<? extends E> other)
把集合other添加到这个集合中
boolean remove(Object obj)
从这个集合中删除等于obj的对象
boolean removeAll(Collection<?> other)
从这个集合中删除所有属于other集合的对象
default boolean removeIf(Predicate<? super E> filter)
从这个集合中删除filter返回true的所有元素,这个方法没用过,也不知怎么用
void clear()
清除集合
boolean retainAll(Collection<?> other)
返回这个集合的对象数组
<T> T[] toArray(t[] arrayToFilll)
返回这个集合的对象数组,如果arrayToFill足够大,将集合中的元素填入这个数组中,剩余空间填补null,
否则分配一个新数组,长度和集合大小相同
下图是关于集合的接口继承关系:
下图是实现接口的具体集合类的继承关系: