Java Collection - 基于字典/树的抽象数据结构的具体数据结构

时间:2012-06-02 19:21:11

标签: java collections abstract-data-type

我的问题是在实现抽象数据结构实现(如变体映射/树)时使用的基本/具体数据结构(如数组)是什么?

我正在寻找java集合中真正使用的东西,而非理论答案。

2 个答案:

答案 0 :(得分:8)

基于Sun / Oracle JDK的快速代码审查。您可以自己轻松找到详细信息。


列表/队列

ArrayList

增长Object[] elementData字段。默认情况下可以容纳10个元素,当无法容纳更多对象时,可以增加大约50%,将旧数组复制到更大的新数组。删除项目时不会缩小。

LinkedList

引用Entry,它依次保存对实际元素,上一个和下一个元素(如果有)的引用。

ArrayDeque

ArrayList类似,但也有两个指向内部E[] elements数组的指针 - headtail。在任何一方添加和删除元素都只是移动这些指针的问题。当数组太小时,阵列增长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/