首页  >  文章  >  Java  >  收藏

收藏

WBOY
WBOY原创
2024-07-17 08:51:37470浏览

Collection 接口定义了列表、向量、堆栈、队列、优先级队列和集合的常用操作。

Java 集合框架支持两种类型的容器:

  • 用于存储元素集合的集合简称为集合
  • 另一个用于存储键/值对,称为映射

地图是高效的数据结构,可使用键快速搜索元素。以下是以下合集。

  • 集合存储一组不重复的元素。
  • 列表存储元素的有序集合。
  • 堆栈存储以后进先出方式处理的对象。
  • 队列存储以先进先出方式处理的对象。
  • PriorityQueue存储按优先级顺序处理的对象。

这些集合的共同特征在接口中定义,并在具体类中提供实现,如下图所示。

Image description

Java Collections Framework 中定义的所有接口和类都分组在 java.util 包中。

Java 集合框架的设计是使用接口、抽象类和具体类的一个很好的例子。接口定义了框架。抽象类提供部分实现。具体类用具体数据结构实现接口。提供部分实现接口的抽象类可以方便用户编写代码。用户可以简单地定义一个扩展抽象类的具体类,而不是实现接口中的所有方法。为了方便起见,提供了诸如 AbstractCollection 之类的抽象类。因此,它们被称为便利抽象类。

Collection 接口是操作对象集合的根接口。其公共方法如下图所示。 AbstractCollection 类提供 Collection 接口的部分实现。它实现了 Collection 中除 addsizeiterator 方法之外的所有方法。这些在适当的具体子类中实现。

Image description

Collection 接口提供了在集合中添加和删除元素的基本操作。 add 方法将一个元素添加到集合中。 addAll 方法将指定集合中的所有元素添加到此集合中。 remove 方法从集合中删除一个元素。 removeAll 方法从该集合中删除指定集合中存在的元素。 retainAll 方法保留此集合中也存在于指定集合中的元素。所有这些方法都返回 boolean。如果方法执行导致集合发生更改,则返回值为 trueclear() 方法只是从集合中删除所有元素。

方法 addAllremoveAllretainAll 与集合的并集、差集和交集操作类似。

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 的任何具体类,例如 HashSetLinkedListVectorStack 来替换ArrayList 测试 Collection 接口中定义的这些方法。

程序创建数组列表的副本(第 30、35、40 行)。这样做的目的是保持原始数组列表不变,并使用其副本执行 addAllretainAllremoveAll 操作。

Java Collections Framework 中的所有具体类都实现 java.lang.Cloneablejava.io.Serialized 接口,除了 java.util.PriorityQueue 没有实现 Cloneable 接口。因此,除优先级队列之外的所有 Cloneable 实例都可以被克隆,并且 Cloneable 的所有实例都可以被序列化。

以上是收藏的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn