Collection接口定义了列表、向量、堆栈、队列、优先级队列和集合的常见操作。
Java Collections Framework 支持两种类型的容器:
映射是使用键快速搜索元素的高效数据结构。以下是以下合集。
这些集合的共同特征在接口中定义,并在具体类中提供实现,如下图所示。
Java Collections Framework 中定义的所有接口和类都分组在 java.util 包中。
Java Collections Framework 的设计是使用接口、抽象类和具体类的一个很好的例子。接口定义了框架。抽象类提供部分实现。具体类用具体数据结构实现接口。提供部分实现接口的抽象类可以方便用户编写代码。用户可以简单地定义一个扩展抽象类的具体类,而不是实现接口中的所有方法。为了方便起见,提供了诸如 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) { ArrayListcollection1 = 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 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 c1 = (ArrayList )(collection1.clone()); c1.addAll(collection2); System.out.println("\nCities in collection1 or collection2: "); System.out.println(c1); c1 = (ArrayList )(collection1.clone()); c1.retainAll(collection2); System.out.print("\nCities in collection1 and collection2: "); System.out.println(c1); c1 = (ArrayList )(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 的所有实例都可以被序列化。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3