📜  Java中的AbstractSet类与示例(1)

📅  最后修改于: 2023-12-03 15:16:28.498000             🧑  作者: Mango

Java中的AbstractSet类与示例

Java中的AbstractSet类是一个抽象的Set类,实现了Set接口中的大多数方法,可以被继承实现具体的set集合操作。由于AbstractSet类是抽象的,它本身不能被实例化,但其子类可以利用其方法来定义不同类型的set集合。

AbstractSet类的继承关系

AbstractSet类是Java集合框架中Set接口的一个抽象实现,它继承自AbstractCollection类,AbstractCollection类又实现了Collection接口。因此,AbstractSet类在Set接口、AbstractCollection类和Collection接口三者之间构成了继承关系。

AbstractSet类的特性

AbstractSet类为实现不同类型Set集合的方法提供了模板。它实现了Set接口包含的大部分方法,而且没有提供任何额外的实现,所以它是一个抽象类。在AbstractSet类中,只有一个抽象方法iterator()需要被实现,这个方法用来返回Set集合的迭代器。

AbstractSet类的方法

AbstractSet类实现了Set接口子集的大多数方法,不过它没有实现addAll方法。以下是AbstractSet类中的一些重要方法:

add()
public boolean add(E e) {
        throw new UnsupportedOperationException();
}
clear()
public void clear() {
        iterator().forEachRemaining((t) -> { iterator.remove(); });
}
contains()
public boolean contains(Object o) {
        Iterator<E> it = iterator();
        if (o==null) {
            while (it.hasNext())
                if (it.next()==null)
                    return true;
        } else {
            while (it.hasNext())
                if (o.equals(it.next()))
                    return true;
        }
        return false;
}
isEmpty()
public boolean isEmpty() {
        return size() == 0;
}
iterator()
public abstract Iterator<E> iterator();
remove()
public boolean remove(Object o) {
        Iterator<E> it = iterator();
        if (o==null) {
            while (it.hasNext()) {
                if (it.next()==null) {
                    it.remove();
                    return true;
                }
            }
        } else {
            while (it.hasNext()) {
                if (o.equals(it.next())) {
                    it.remove();
                    return true;
                }
            }
        }
        return false;
}
size()
public int size() {
        int count = 0;
        for (Iterator<E> it = iterator(); it.hasNext(); it.next()){
            count++;
        }
        return count;
}
AbstractSet类的示例

以下是一个示例程序,它实现了一个包含多个整数的Set集合,并演示了如何使用AbstractSet类中的方法:

import java.util.*;
 
public class SetExample {
 
   public static void main(String[] args) {
 
      // 创建一个整数集合
      Set<Integer> set = new HashSet<>();
 
      // 添加元素到集合
      set.add(10);
      set.add(2);
      set.add(30);
      set.add(40);
 
      // 显示集合中的元素
      System.out.println("Set集合中的元素: " + set);
 
      // 检查集合是否包含特定元素
      boolean isExists = set.contains(30);
      System.out.println("Set集合中是否包含元素 30 :" + isExists);
 
      // 获取集合中的元素数量
      int setSize = set.size();
      System.out.println("Set集合中的元素数量:" + setSize);
 
      // 从集合中移除特定元素
      set.remove(30);
      System.out.println("移除元素后的Set集合:" + set);
 
      // 清空集合
      set.clear();
      System.out.println("清空Set集合后的元素数量:" + set.size());
   }
}

输出结果为:

Set集合中的元素: [2, 40, 10, 30]
Set集合中是否包含元素 30 :true
Set集合中的元素数量:4
移除元素后的Set集合:[2, 40, 10]
清空Set集合后的元素数量:0

可以看到,通过继承AbstractSet类实现了一个包含多个整数的Set集合,并演示了如何使用AbstractSet类中的方法。