Java集合
Java Collection接口(java.util.Collection)是Java Collection API的根接口之一。尽管我们不直接实例化Collection,而是实例化Collection的子类型,但是我们通常可以将这些子类型统一地视为Collection。在本文中,我们将看到如何。
Java创建集合
如上所述,我们不会直接创建"集合"实例,而是直接创建"集合"子类型之一的实例。这是创建一个List的例子,List是Collection的子类型:
Collection collection = new ArrayList();
上面的示例适用于"集合"的每个子类型。
集合子类型
以下接口(集合类型)扩展了Java集合接口:
- List
- Set
- SortedSet
- NavigableSet
- Queue
- Deque
Java没有随附Collection接口的可用实现,因此我们将不得不使用列出的子类型之一。 Collection接口仅定义了这些Collection子类型中的每个共享的一组方法(行为)。这样就可以忽略我们使用的是哪种特定类型的Collection,而仅将其视为Collection。这是标准继承,因此没有什么神奇的,但是它有时仍然是一个不错的功能。本文后面的部分将介绍这些常用操作中最常用的。
这是对集合进行操作的方法:
public class MyCollectionUtil{
public static void doSomething(Collection collection) {
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
Object object = iterator.next();
//do something to object here...
}
}
}
以下是几种使用不同Collection子类型调用此方法的方法:
Set set = new HashSet(); List list = new ArrayList(); MyCollectionUtil.doSomething(set); MyCollectionUtil.doSomething(list);
Java将元素添加到集合
无论我们使用哪种Collection子类型,都有一些标准方法可将元素添加到Collection中。通过add()方法将元素添加到Collection中。这是将元素添加到JavaCollection的示例:
String anElement = "an element"; Collection collection = new HashSet(); boolean didCollectionChange = collection.add(anElement);
add()方法将给定元素添加到集合中,如果由于调用add()方法而导致Collection发生更改,则返回true。例如,"设置"可能没有更改。如果Set已经包含该元素,则不再添加。另一方面,如果我们在"列表"上调用" add()"并且"列表"已经包含该元素,则该元素在"列表"中将存在两次。
Java从集合中删除元素
remove()方法从Collection中删除给定元素,如果删除的元素存在于Collection中并被删除,则返回true。如果该元素不存在,则remove()方法将返回false。这是从JavaCollection中删除元素的示例:
boolean wasElementRemoved = collection.remove("an element");
将对象集合添加到集合
我们还可以使用addAll()将对象的集合添加到Java Collection中。这是将对象集合添加到JavaCollection的示例:
Set aSet = ... // get Set with elements from somewhere Collection collection = new HashSet(); collection.addAll(aSet); //returns boolean too, but ignored here
JavaCollection``addAll()会将在Collection中找到的所有元素添加为方法的参数。没有添加Collection对象本身。只有它的元素。如果我们使用Collection作为参数调用了add(),那么将添加Collection对象本身,而不是其元素。
addAll()方法的确切行为取决于Collection子类型。有些Collection子类型允许多次添加同一元素,而有些则不允许。
从集合中删除元素集合
JavaCollection``removeAll()删除所有将Collection作为参数传递给方法的元素。如果Collection参数包含未在目标集合中找到的任何元素,则将忽略这些元素。这是从JavaCollection中删除元素集合的示例:
Collection objects = //... get a collection of objects from somewhere. collection.removeAll(objects);
保留另一个集合中一个集合的所有元素
JavaCollection``retainAll()与removeAll()相反。它不会删除在参数" Collection"中找到的所有元素,而是保留所有这些元素,并删除所有其他元素。请记住,仅当元素已包含在目标集合中时,它们才会保留。在参数"集合"中找到的,不在目标集合中的任何新元素都不会自动添加。他们只是被忽略。下面是一个示例,该示例保留一个Java中的一个Coletion中的所有元素:
Collection colA = new ArrayList();
Collection colB = new ArrayList();
colA.add("A");
colA.add("B");
colA.add("C");
colB.add("1");
colB.add("2");
colB.add("3");
Collection target = new HashSet();
target.addAll(colA); //target now contains [A,B,C]
target.addAll(colB); //target now contains [A,B,C,1,2,3]
target.retainAll(colB); //target now contains [1,2,3]
Java检查集合是否包含某个元素
Collection接口有两种方法来检查Collection是否包含一个或者多个特定元素。这些是contains()和containsAll()方法。它们在这里说明:
Collection collection = new HashSet();
boolean containsElement = collection.contains("an element");
Collection elements = new HashSet();
boolean containsAll = collection.containsAll(elements);
如果集合包含该元素,则" contains()"返回true,否则返回false。
如果containsAll()包含参数集合中的所有元素,则返回true,否则返回false。
Java集合大小
我们可以使用size()方法检查集合的大小。 "大小"是指集合中元素的数量。这是一个例子:
int numberOfElements = collection.size();
Java迭代集合
我们可以迭代集合的所有元素。这是通过从集合中获取Java迭代器并对其进行迭代来完成的。外观如下:
Collection collection = new HashSet();
//... add elements to the collection
Iterator iterator = collection.iterator();
while(iterator.hasNext()){
Object object = iterator.next();
System.out.println(object);
}
我们还可以使用Java for-each循环来迭代JavaCollection:
Collection collection = new HashSet();
collection.add("A");
collection.add("B");
collection.add("C");
for(Object object : collection) {
System.out.println(object);
}

