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); }