Java : AbstractSet 示例

Java 中的 AbstractSet (Java SE 23 & JDK 23) 及其示例。
您将找到大多数 AbstractSet<E> 方法的代码示例。

注解 :

  • 本文可能使用了翻译软件以方便阅读。 另请查看英文原文

简介

此类提供了 Set 接口的骨架实现,以最大限度地减少实现该接口所需的工作量。 (机器翻译)

Class diagram

class MySet extends AbstractSet<String> {

    private final String[] elements;

    MySet(String e1, String e2, String e3) {
        if (Objects.equals(e1, e2) || Objects.equals(e1, e3) || Objects.equals(e2, e3)) {
            throw new IllegalArgumentException("duplicate element");
        }

        elements = new String[]{e1, e2, e3};
    }

    @Override
    public Iterator<String> iterator() {
        return new Iterator<>() {
            private int index;

            @Override
            public boolean hasNext() {
                return elements.length != index;
            }

            @Override
            public String next() {
                final var value = elements[index];
                index++;
                return value;
            }
        };
    }

    @Override
    public int size() {
        return elements.length;
    }
}

final var set = new MySet("aaa", "bbb", "ccc");
System.out.println(set); // [aaa, bbb, ccc]
System.out.println(set.size()); // 3

System.out.println("-- elements --");
for (final var element : set) {
    System.out.println(element);
}

// Result
// ↓
//-- elements --
//aaa
//bbb
//ccc

Constructors

AbstractSet ()

唯一建造者。 (机器翻译)

class MySet extends AbstractSet<String> {

    private final String[] elements;

    MySet(String e1, String e2, String e3) {
        if (Objects.equals(e1, e2) || Objects.equals(e1, e3) || Objects.equals(e2, e3)) {
            throw new IllegalArgumentException("duplicate element");
        }

        elements = new String[]{e1, e2, e3};
    }

    @Override
    public Iterator<String> iterator() {
        return new Iterator<>() {
            private int index;

            @Override
            public boolean hasNext() {
                return elements.length != index;
            }

            @Override
            public String next() {
                final var value = elements[index];
                index++;
                return value;
            }
        };
    }

    @Override
    public int size() {
        return elements.length;
    }
}

final var set = new MySet("aaa", "bbb", "ccc");
System.out.println(set); // [aaa, bbb, ccc]
System.out.println(set.size()); // 3

System.out.println("-- elements --");
for (final var element : set) {
    System.out.println(element);
}

// Result
// ↓
//-- elements --
//aaa
//bbb
//ccc

Methods

boolean equals (Object o)

将指定对象与此集合进行比较以确定其是否相等。 (机器翻译)

final AbstractSet<String> set = new HashSet<>();
Collections.addAll(set, "a", "b", "c");
System.out.println(set); // [a, b, c]

System.out.println(set.equals(Set.of("a"))); // false
System.out.println(set.equals(Set.of("a", "b"))); // false
System.out.println(set.equals(Set.of("a", "b", "c"))); // true
System.out.println(set.equals(Set.of("c", "b", "a"))); // true
final AbstractSet<String> set = new HashSet<>();
Collections.addAll(set, "a", "b", "c");
System.out.println(set); // [a, b, c]

final Set<String> hashSet = new HashSet<>(set);
System.out.println(hashSet); // [a, b, c]
System.out.println(set.equals(hashSet)); // true

final Set<String> treeSet = new TreeSet<>(set);
System.out.println(treeSet); // [a, b, c]
System.out.println(set.equals(treeSet)); // true

final var list = new ArrayList<>(set);
System.out.println(list); // [a, b, c]
System.out.println(set.equals(list)); // false

int hashCode ()

返回此集合的哈希码值。 (机器翻译)

final AbstractSet<String> set1 = new HashSet<>();
Collections.addAll(set1, "a", "b", "c");
System.out.println(set1.hashCode()); // 294

final AbstractSet<Integer> set2 = new HashSet<>();
Collections.addAll(set2, 1, 2, 3);
System.out.println(set2.hashCode()); // 6
final AbstractSet<String> set1 = new LinkedHashSet<>();
set1.add("a");
set1.add("b");
set1.add("c");

System.out.println(set1); // [a, b, c]
System.out.println(set1.hashCode()); // 294

final AbstractSet<String> set2 = new LinkedHashSet<>();
set2.add("c");
set2.add("b");
set2.add("a");

System.out.println(set2); // [c, b, a]
System.out.println(set2.hashCode()); // 294

boolean removeAll (Collection<?> c)

从此集合中删除指定集合中包含的所有元素(可选操作)。 (机器翻译)

final var src = Set.of("a", "b", "c");

{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.<String>of())); // false
    System.out.println(set); // [a, b, c]
}
{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.of("a"))); // true
    System.out.println(set); // [b, c]
}
{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.of("a", "b"))); // true
    System.out.println(set); // [c]
}
{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.of("b", "a"))); // true
    System.out.println(set); // [c]
}
{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.of("a", "b", "c"))); // true
    System.out.println(set); // []
}
{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.of("X", "Y"))); // false
    System.out.println(set); // [a, b, c]
}
{
    final AbstractSet<String> set = new HashSet<>(src);
    System.out.println(set); // [a, b, c]

    System.out.println(set.removeAll(Set.of("a", "X"))); // true
    System.out.println(set); // [b, c]
}

Methods declared in AbstractCollection

add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, toArray, toArray, toString

请参阅下面的链接。

Methods declared in Collection

parallelStream, removeIf, stream, toArray

请参阅下面的链接。

Methods declared in Iterable

forEach

请参阅下面的链接。

Methods declared in Set

add, addAll, clear, contains, containsAll, isEmpty, iterator, remove, retainAll, size, spliterator, toArray, toArray

请参阅下面的链接。


相关文章

To top of page