Java集合

时间:2020-01-09 10:35:47  来源:igfitidea点击:

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