Collection接口
Collection集合的顶层接口,也正因为其是一个接口类型,所以Collection是不可以被实例化的。
但是在Collection接口的基础上,又衍生出了许许多多的子接口和可实现类。
Collection体系集合
Collection接口作为根接口,在此基础上,衍生出了List子接口和Set子接口,两种接口又具有不同的特点。
List:内部元素有序,有下标,元素可重复。
Set:内部元素无序,无下标,元素不重复。
之后再List子接口和Set子接口上又衍生出了许许多多的实现类,
List:
- ArrayList
- LinkedList
- Vector
Set:
- HashSet
- TreeSet
具体的继承关系如下图所示:
Collection接口中的方法
对于一个集合框架来说,最重要的就是增加元素、删除元素和一些判断功能,以及遍历集合的功能。
增加元素
boolean add(E e);
该函数向collection中添加一个元素,确保此 collection 包含指定的元素(可选操作)。如果此 collection 由于调用而发生更改,则返回 true。(如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。)
boolean addAll(Collection<? extends E> c);
将指定 collection© 中的所有元素都添加到此 collection 中(可选操作)。如果在进行此操作的同时修改指定的 collection,那么此操作行为是不确定的。(这意味着如果指定的 collection© 是此 collection,并且此 collection 为非空,那么此调用的行为是不确定的。)
如果此 collection 由于调用而发生更改,则返回 true.
删除元素
void clear();
移除此 collection 中的所有元素(可选操作)。
boolean remove(Object o);
从此 collection 中移除指定元素的单个实例,如果存在的话(可选操作)。如果存在多个相同元素,则只删除最先加入的那个元素。同时这里的Object o物体默认指的是地址相同,而不是值相同,除非重写equals方法。
如果此调用将移除一个元素,则返回 true
boolean removeAll(Collection<?> c);
移除此 collection 中那些也包含在指定 collection 中的所有元素(可选操作)。此调用返回后,collection 中将不包含任何与指定 collection 相同的元素,比较元素是否相同是也是默认比较地址,若要比较内容,需要重写equals方法。
如果此 collection 由于调用而发生更改,则返回 true
判断功能
boolean contains(Object o);
如果此 collection 包含指定的元素,则返回 true。这里的比较也是默认使用地址比较,想要比较内容则需要重写equals函数。
boolean containsAll(Collection<?> c);
如果此 collection 包含指定 collection 中的所有元素,则返回 true。
boolean isEmpty();
如果此 collection 不包含元素,则返回 true。
遍历集合
遍历集合的时候,一般来说有两种方法进行遍历。第一种是foreach方法来进行遍历,但是这个方法使用较少,更多的情况下使用的还是迭代器来对集合进行遍历。
迭代器是集合的专用方式,用来实现集合的遍历,一般通过下列函数来获取某个集合的迭代器。
Iterator<E> iterator();
迭代器中一般使用三个方法,如下所示。
boolean hasNext();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
其中hasNext函数用于判断此位置是否有元素,next函数用于获取当前元素,并移动到下一个位置,remove函数用于删除当前元素
长度功能
集合中主要使用size函数来获取该集合中元素的个数,也就是集合的长度。
int size();
交集功能
仅保留此 collection 中那些也包含在指定 collection 的元素(可选操作)。换句话说,移除此 collection 中未包含在指定 collection© 中的所有元素。
简单来说,两个集合交集的元素给原集合,并判断原集合是否改变,改变则true,不变则false
boolean retainAll(Collection<?> c);
样例代码
public static void main(String[] args) {
// 创建集合
Collection<String> collection = new ArrayList<String>();
// 1. 添加元素
collection.add("苹果");
collection.add("西瓜");
collection.add("榴莲");
collection.add("苹果");
System.out.println("元素个数:" + collection.size());
// 2. 删除元素
collection.remove("苹果");
System.out.println("元素个数:" + collection.size());
// 3. 遍历元素
// 3.1 使用增强for进行遍历
for (Object o : collection) {
System.out.println(o);
}
// 3.2 使用迭代器(专门用来遍历集合的一种方式)
// hasNext(): 有没有下一个元素
// next(): 获取下一个元素
// remove(): 删除当前元素
Iterator<String> it = collection.iterator();
while(it.hasNext()) {
String s = (String)it.next();
System.out.println(s);
// 在使用迭代器的过程中,不可以使用collection中的remove函数删除元素
it.remove();
}
System.out.println(collection.size());
// 4.判断元素是否存在
collection.add("apple");
System.out.println(collection.contains("apple"));
System.out.println(collection.contains("banana"));
// 判断是否为空
System.out.println(collection.isEmpty());
int a = 1;
System.out.println(a = 2);
}