Java AbstractSet类及实例

Java AbstractSet类及实例

Java中的 AbstractSet类 是Java集合框架的一部分,它实现了 集合接口 并扩展了 AbstractCollection类。 它为Set接口提供了一个骨架式的实现。这个类并没有覆盖AbstractCollection类的任何实现,而只是增加了equals()和hashCode()方法的实现。

通过扩展这个类来实现一个集合的过程与通过扩展AbstractCollection来实现一个集合的过程是相同的,只是这个类的子类中的所有方法和构造函数必须服从Set接口所施加的额外约束(例如,add方法不能允许向一个集合中添加多个对象的实例)。

Java中的AbstractSet类及实例

从类的层次结构图中可以得出结论,它实现了 Iterable <E>, Collection <E>, Set<E>接口。它的直接子类是ConcurrentSkipListSet, CopyOnWriteArraySet, EnumSet, HashSet, TreeSet。正如我们上面已经讨论过的,AbstractSet是一个抽象类,所以它应该被分配一个子类的实例,比如TreeSet, HashSet, 或者EnumSet。

语法: 声明

public abstract class AbstractSet<E>
extends AbstractCollection<E>
implements Set<E>

其中 E 是这个Set所维护的元素的类型。

AbstractSet类的构造函数

1. protected AbstractSet():默认的构造函数,但是由于被保护,它不允许创建一个AbstractSet对象。

AbstractSet<E> as = new TreeSet<E>();

抽象集的方法

方法 描述
equals(Object o) 将指定的对象与这个集合进行比较,看是否相等。
hashCode() 返回这个集合的哈希代码值。
removeAll(Collection c) | 从这个集合中移除其包含在指定集合中的所有元素(可选操作)。

**例1** :
“`java
// Java Program to Illustrate AbstractSet Class
 
// Importing required classes
import java.util.*;
 
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args) throws Exception
    {
        // Try block to check for exceptions
        try {
 
            // Creating an empty TreeSet of integer type by
            // creating object of AbstractSet
            AbstractSet<Integer> abs_set
                = new TreeSet<Integer>();
 
            // Populating TreeSet
            // using add() method
            abs_set.add(1);
            abs_set.add(2);
            abs_set.add(3);
            abs_set.add(4);
            abs_set.add(5);
 
            // Printing the elements inside above TreeSet
            System.out.println("AbstractSet: " + abs_set);
        }
 
        // Catch block to handle the exceptions
        catch (Exception e) {
 
            // Display exception on console
            System.out.println(e);
        }
    }
}
“`

**输出**
“`java
AbstractSet: [1, 2, 3, 4, 5]
“`

**例2** :
“`java
// Java Program to Illustrate Methods
// of AbstractSet class
 
// Importing required classes
import java.util.*;
 
// Main class
public class GFG {
 
    // Main driver method
    public static void main(String[] args) throws Exception
    {
 
        // Try block to check for exceptions
        try {
 
            // Creating an empty TreeSet of integer type
            AbstractSet<Integer> abs_set
                = new TreeSet<Integer>();
 
            // Populating above TreeSet
            // using add() method
            abs_set.add(1);
            abs_set.add(2);
            abs_set.add(3);
            abs_set.add(4);
            abs_set.add(5);
 
            // Printing the elements inside TreeSet
            System.out.println("AbstractSet before "
                               + "removeAll() operation : "
                               + abs_set);
 
            // Creating an ArrayList of integer type
            Collection<Integer> arrlist2
                = new ArrayList<Integer>();
 
            // Adding elements to above ArrayList
            arrlist2.add(1);
            arrlist2.add(2);
            arrlist2.add(3);
 
            // Printing the ArrayList elements
            System.out.println("Collection Elements"
                               + " to be removed : "
                               + arrlist2);
 
            // Removing elements from AbstractSet specified
            // using removeAll() method
            abs_set.removeAll(arrlist2);
 
            // Printing the elements of ArrayList
            System.out.println("AbstractSet after "
                               + "removeAll() operation : "
                               + abs_set);
        }
 
        // Catch block to handle the exceptions
        catch (NullPointerException e) {
 
            // Display exception on console
            System.out.println("Exception thrown : " + e);
        }
    }
}
“`

**输出**

![Java中的AbstractSet类及实例](https://static.deepinout.com/geekdocs/2023/02/20230210090558-2.png “Java中的AbstractSet类及实例”)

下面定义了一些其他的类或接口的方法,在某种程度上帮助我们更好地理解AbstractSet类,如下。

### java.util.AbstractCollection类中声明的方法

方法 | 描述
—|—
add(E e) | 确保这个集合包含指定的元素(可选操作)。
addAll(Collection c) | 将指定集合中的所有元素添加到这个集合中(可选操作)。
clear() | 从这个集合中移除所有的元素(可选操作)。
contains(Object o) | 如果这个集合包含指定的元素,返回true。
containsAll(Collection c)

如果这个集合包含了指定集合中的所有元素,返回true。
isEmpty() 如果这个集合不包含任何元素,则返回真。
iterator() 返回这个集合中所包含的元素的迭代器。
remove(Object o) 从这个集合中删除一个指定元素的单个实例,如果它存在的话(可选操作)。
retainAll(Collection c) | 只保留这个集合中包含在指定集合中的元素(可选操作)。
toArray() | 返回一个包含此集合中所有元素的数组。
toArray(T[] a) | 返回一个包含此集合中所有元素的数组;返回的数组的运行时类型是指定数组的类型。
toString() | 返回这个集合的字符串表示。

### 在java.util.Collection 接口中声明的方法

方法 | 描述
—|—
parallelStream() | 返回一个以该集合为源的可能的并行流。
removeIf(Predicate filter) | 删除这个集合中满足给定谓词的所有元素。
stream() | 返回一个以这个集合为源的顺序流。
toArray(IntFunction generator) | 返回一个包含此集合中所有元素的数组,使用提供的生成器函数来分配返回的数组。

### java.lang.Iterable接口中声明的方法

方法 | 描述
—|—
forEach(Consumer action) | 对Iterable中的每个元素执行给定的动作,直到所有元素都被处理完,或者该动作抛出一个异常。

### 在接口java.util.Set中声明的方法

方法 | 描述
—|—
add(E e) | 如果指定的元素还没有出现,就把它添加到这个集合中(可选操作)。
addAll(Collection c) | 如果指定集合中的所有元素还没有出现,则将它们添加到这个集合中(可选操作)。
clear() | 从这个集合中移除所有的元素(可选操作)。
contains(Object o) | 如果这个集合包含指定的元素,返回true。
containsAll(Collection c)

如果这个集合包含指定集合的所有元素,则返回true。
isEmpty() 如果这个集合不包含任何元素,则返回真。
迭代器() 返回这个集合中的元素的一个迭代器。
remove(Object o) 如果指定的元素存在,从这个集合中删除(可选操作)。
retainAll(Collection<?> c) 只保留这个集合中包含在指定集合中的元素(可选操作)。
size() 返回这个集合中元素的数量(它的cardinality)。
spliterator() 在这个集合中的元素上创建一个Spliterator。
toArray() 返回一个包含这个集合中所有元素的数组。
toArray(T[] a) 返回一个包含这个集合中所有元素的数组;返回的数组的运行时类型是指定数组的类型。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程