HashTable和LinkedList的LinkedHashSet实现?

问题描述 投票:0回答:1

我在与LinkedHashSet相关的JAVA文档中遇到了以下内容:

Set接口的哈希表和链表实现,具有可预测的迭代顺序。

但是如果我看到LinkedHashSet的来源,则找不到与implements/extendsHashTable相关的任何LinkedList。那么它如何抑制这两个data structures的功能?

java collections linkedhashset
1个回答
2
投票

它不会从这些类继承,也不会以任何方式使用它们。

但是您可以编写自己的链表类,即使它与java.util.LinkedList没有关系,它仍然是链表。这就是LinkedHashSet的工作方式:它既不使用java.util.Hashtable,也不使用java.util.LinkedList,但是仍然具有data structure的实现。


-1
投票

作为其他答案,该类不能通过使用HashTableLinkedList类来获得其行为。这是java.util.LinkedHashSet的类声明。

public class LinkedHashSet<E> extends HashSet<E> implements Set<E> ...

扩展HashSet并实现Set使它能够演示类似集合的属性(有关更多详细信息,请参见this answer)。至于有序的插入和检索,可以使用此类的迭代器完成:

public Spliterator<E> spliterator() {
        return Spliterators.spliterator(this, 17);
    }

17表示此迭代器的characteristics

int特性()

返回此分隔符及其元素的一组特征。结果表示为ORDERED,DISTINCT,已排序,已分级,非空,不可变,并发,已订阅。 ...

17是与ORDEREDDISTINCT迭代器特征相对应的16和1的OR值,因此使该集合能够演示为链接的哈希集定义的行为。

© www.soinside.com 2019 - 2024. All rights reserved.