我的问题是在实现抽象数据结构实现(如变体映射/树)时使用的基本/具体数据结构(如数组)是什么?
我正在寻找java集合中真正使用的东西,而非理论答案。
答案 0 :(得分:8)
基于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位。
答案 1 :(得分:1)
每个实施当然有一个答案。看看javadocs,他们经常描述这些东西。 http://docs.oracle.com/javase/7/docs/api/