HashSet使用HashTable作为数据结构,HashMap作为集合使用?不建议使用内存点视图数组?

And*_*per 0 java collections arraylist hashmap

按照这个

HashSet的基础数据结构是哈希表.

但我还读到HashSet在内部使用HashMap来避免重复值,而重复值又在内部使用了桶数组和LinkedList(在Java 8中由树替换)

那么说HashSet使用HashTable作为数据结构和HashMap作为集合是正确的吗?

TreeSet实现SortedSet接口,因此不允许重复值.

这是否意味着TreeSet不在内部使用HashMap来使用HashSet来避免重复值?LinkedHashSet是否在内部使用HashMap?

按照这个

建议不要使用内存点视图数组.

为什么?通过我之前阅读的内容 -

由于无法为原始数据类型创建ArrayList,因此ArrayList的成员始终引用不同内存位置的对象(有关详细信息,请参阅此处).因此,在ArrayList中,实际对象永远不会存储在连续的位置.实际对象的引用存储在连续的位置.在数组中,它取决于数组是基本类型还是对象类型.在原始类型的情况下,实际值是连续的位置,但是在对象的情况下,分配类似于ArrayList.

shi*_*iri 5

小写散列表(通常是定义的数据结构)和java Hashtable类之间存在差异,java 类是Java中哈希表的同步实现,早于类HashMapHashSet类.HashSet根本不使用Hashtable该类.相反,它使用(再次,小写h)哈希表数据结构,它是使用实现的HashMap.Hashtable应该很少使用当代代码.根据javadocsHashtable:

如果不需要线程安全实现,建议使用HashMap代替Hashtable.如果需要线程安全的高度并发实现,那么建议使用ConcurrentHashMap代替Hashtable.

至于你的其他问题:

  • TreeSet使用与哈希表完全不同的数据结构,称为红黑树.有关HashSet和TreeSet之间差异的概述,请参阅此详细解答.
  • 我不确定"内存点视图阵列"的含义是什么意思.该网站写得不好.