Collection 接口定义了列表、向量、堆栈、队列、优先级队列和集合的常用操作。
Java 集合框架支持两种类型的容器:
地图是高效的数据结构,可使用键快速搜索元素。以下是以下合集。
这些集合的共同特征在接口中定义,并在具体类中提供实现,如下图所示。
Java Collections Framework 中定义的所有接口和类都分组在 java.util 包中。
Java 集合框架的设计是使用接口、抽象类和具体类的一个很好的例子。接口定义了框架。抽象类提供部分实现。具体类用具体数据结构实现接口。提供部分实现接口的抽象类可以方便用户编写代码。用户可以简单地定义一个扩展抽象类的具体类,而不是实现接口中的所有方法。为了方便起见,提供了诸如 AbstractCollection 之类的抽象类。因此,它们被称为便利抽象类。
Collection 接口是操作对象集合的根接口。其公共方法如下图所示。 AbstractCollection 类提供 Collection 接口的部分实现。它实现了 Collection 中除 add、size 和 iterator 方法之外的所有方法。这些在适当的具体子类中实现。
Collection 接口提供了在集合中添加和删除元素的基本操作。 add 方法将一个元素添加到集合中。 addAll 方法将指定集合中的所有元素添加到此集合中。 remove 方法从集合中删除一个元素。 removeAll 方法从该集合中删除指定集合中存在的元素。 retainAll 方法保留此集合中也存在于指定集合中的元素。所有这些方法都返回 boolean。如果方法执行导致集合发生更改,则返回值为 true。 clear() 方法只是从集合中删除所有元素。
方法 addAll、removeAll 和 retainAll 与集合的并集、差集和交集操作类似。
Collection接口提供了各种查询操作。 size 方法返回集合中元素的数量。 contains 方法检查集合是否包含指定元素。 containsAll 方法检查集合是否包含指定集合中的所有元素。如果集合为空,isEmpty 方法将返回 true。
Collection 接口提供 toArray() 方法,该方法返回集合的数组表示形式。
Collection 接口中的某些方法无法在具体子类中实现。在这种情况下,该方法将抛出 java.lang.UnsupportedOperationException,它是 RuntimeException 的子类。这是一个很好的设计,您可以在您的项目中使用。如果某个方法在子类中没有意义,可以按如下方式实现:
public void someMethod() {
抛出新的 UnsupportedOperationException
(“不支持该方法”);
}
下面的代码给出了使用 Collection 接口中定义的方法的示例。
package demo; import java.util.*; public class TestCollection { public static void main(String[] args) { ArrayList<String> collection1 = new ArrayList<>(); collection1.add("New York"); collection1.add("Atlanta"); collection1.add("Dallas"); collection1.add("Madison"); System.out.println("A list of cities in collection1:"); System.out.println(collection1); System.out.println("\nIs Dallas in collection1? " + collection1.contains("Dallas")); collection1.remove("Dallas"); System.out.println("\n" + collection1.size() + " cities are in collection1 now"); Collection<String> collection2 = new ArrayList<>(); collection2.add("Seattle"); collection2.add("Portland"); collection2.add("Los Angeles"); collection2.add("Atlanta"); System.out.println("\nA list of cities in collection2:"); System.out.println(collection2); ArrayList<String> c1 = (ArrayList<String>)(collection1.clone()); c1.addAll(collection2); System.out.println("\nCities in collection1 or collection2: "); System.out.println(c1); c1 = (ArrayList<String>)(collection1.clone()); c1.retainAll(collection2); System.out.print("\nCities in collection1 and collection2: "); System.out.println(c1); c1 = (ArrayList<String>)(collection1.clone()); c1.removeAll(collection2); System.out.print("\nCities in collection1, but not in 2: "); System.out.println(c1); } }
收藏城市列表1:
[纽约、亚特兰大、达拉斯、麦迪逊]
达拉斯在收藏1吗?是的
现已收集 3 个城市1
收藏城市列表2:
[西雅图、波特兰、洛杉矶、亚特兰大]
集合 1 或集合 2 中的城市:
[纽约、亚特兰大、麦迪逊、西雅图、波特兰、洛杉矶、亚特兰大]
集合 1 和集合 2 中的城市:[亚特兰大]
城市在集合 1 中,但不在集合 2 中:[纽约、麦迪逊]
程序使用ArrayList创建一个具体的集合对象(第7行),并调用Collection接口的contains方法(第16行), remove 方法(第 18 行)、size 方法(第 19 行)、addAll 方法(第 31 行)、retainAll 方法(第 36 行)和removeAll 方法(第 41 行)。
在此示例中,我们使用 ArrayList。您可以使用 Collection 的任何具体类,例如 HashSet、LinkedList、Vector 和 Stack 来替换ArrayList 测试 Collection 接口中定义的这些方法。
程序创建数组列表的副本(第 30、35、40 行)。这样做的目的是保持原始数组列表不变,并使用其副本执行 addAll、retainAll 和 removeAll 操作。
Java Collections Framework 中的所有具体类都实现 java.lang.Cloneable 和 java.io.Serialized 接口,除了 java.util.PriorityQueue 没有实现 Cloneable 接口。因此,除优先级队列之外的所有 Cloneable 实例都可以被克隆,并且 Cloneable 的所有实例都可以被序列化。
以上是收藏的详细内容。更多信息请关注PHP中文网其他相关文章!