【发布时间】:2011-02-13 00:08:11
【问题描述】:
谁能指导我深入了解使用的数据结构以及它是如何在 Util Collection 页面的 List、Set 和 Maps 中实现的。
在面试中,大部分问题都是关于算法的,但是我从来没有在任何地方看到过实现细节,谁能分享一下信息。
【问题讨论】:
标签: java algorithm list map set
谁能指导我深入了解使用的数据结构以及它是如何在 Util Collection 页面的 List、Set 和 Maps 中实现的。
在面试中,大部分问题都是关于算法的,但是我从来没有在任何地方看到过实现细节,谁能分享一下信息。
【问题讨论】:
标签: java algorithm list map set
要了解 Java 如何实现集合,最好的地方是源代码本身,免费提供。通常,Lists 实现为数组(ArrayList)或链表(LinkedList);集合要么是哈希表(HashSet),要么是树(TreeSet);和地图是哈希表(HashMap)。
用于操作数组、链表、哈希表和二叉树或 n 叉树(添加、删除、搜索、排序)的算法本身就足够复杂,需要一门完整的课程来涵盖所有这些。任何进行自己程序设计的人通常都需要深入了解这些算法及其性能权衡。这里没有什么可以替代教科书学习和/或练习。
【讨论】:
API的源代码可用,获取JDK并从安装文件夹中打开src.zip文件。
【讨论】:
ArrayList:数组
LinkedList:双向链表(Entry 对象)
HashMap:Entry对象数组,每个Entry指向单链表
HashSet:内部使用 HashMap,将数据作为 Key 存储,将 dummy Object(属于 Object 类)作为 Value 存储在 map 中。
TreeMap:Entry 对象的红黑树实现。
TreeSet:内部使用TreeMap。键作为数据,虚拟对象作为值。
*Entry:是这些集合中的一个内部类,通常具有 Key、Value、其他 Entry 对象的引用等。
【讨论】:
您可以随时打开源文件,它们都在那里,但是,我不建议这样做,因为它们通常很难理解。相反,我会尝试找到底层数据结构并进行查找。 Wikipedia 包含您想了解的有关这些主题的大部分信息,而 google 包含绝对其余的信息。
列表只是一个dynamic array,
设置是... set,
并且映射通常是hash tables 以键的哈希为键,并存储为键值对。
如果您要深入研究源代码,我建议您熟悉“它可能是如何工作的”,否则会很难理解,尤其是哈希表。
【讨论】: