我的问题是关于在实现抽象数据结构实现(如变体映射/树)中使用的基本/具体数据结构(如数组)是什么?
我正在寻找 java 集合中真正使用的东西,而不是理论上的答案。
我的问题是关于在实现抽象数据结构实现(如变体映射/树)中使用的基本/具体数据结构(如数组)是什么?
我正在寻找 java 集合中真正使用的东西,而不是理论上的答案。
基于对 Sun/Oracle JDK 的快速代码审查。您可以自己轻松找到详细信息。
ArrayList
生长Object[] elementData
领域。默认可以容纳 10 个元素,当无法容纳更多对象时增长约 50%,将旧数组复制到更大的新数组。移除物品时不会收缩。
LinkedList
依次引用Entry
实际元素、前一个和下一个元素(如果有)的引用。
ArrayDeque
类似于ArrayList
但也持有两个指向内部E[] elements
数组的指针 -head
和tail
. 在任一侧添加和删除元素都只是移动这些指针的问题。当太小时,数组会增长 200%。
HashMap
Entry[] table
拿着所谓的水桶的生长领域。每个桶包含具有与关键模块表大小相同的哈希的条目的链接列表。
TreeMap
Entry<K,V> root
参考持有红黑平衡树的根。
ConcurrentHashMap
类似于HashMap
但对每个存储桶(称为段)的访问是由一个独立的锁同步的。
TreeSet
在下面使用TreeMap
(!)
HashSet
在下面使用HashMap
(!)
BitSet
使用long[] words
字段以尽可能提高内存效率。一个元素最多可存储 64 位。
当然,每种实现都有一个答案。看看javadocs,他们经常描述这些东西。http://docs.oracle.com/javase/7/docs/api/