Java 哈希表是否适合实现手机的通讯录功能

Java 哈希表是否适合实现手机的通讯录功能,java,data-structures,Java,Data Structures,我在阅读时发现了这个问题,我不知道它的正确答案是什么。。问题是: 假设您正在为手机实现地址簿功能。地址 该书需要按人的姓氏排序,并在需要时支持快速访问 按姓氏查询。以下哪种数据结构是一个好的选择 是否用于存储通讯簿?解释原因。哪一个是错误的选择?为什么 (a) 未排序链表 (b) 排序链表 (c) 二叉搜索树 (d) 哈希表 我的答案是使用哈希表,因为它有键和值。。。 我的回答正确吗 谢谢(c)二叉搜索树 因为它是排序的,并且支持快速访问。不,通常哈希表不是电话簿的最佳选择 哈希表具有出色的O(

我在阅读时发现了这个问题,我不知道它的正确答案是什么。。问题是:

假设您正在为手机实现地址簿功能。地址 该书需要按人的姓氏排序,并在需要时支持快速访问 按姓氏查询。以下哪种数据结构是一个好的选择 是否用于存储通讯簿?解释原因。哪一个是错误的选择?为什么

(a) 未排序链表

(b) 排序链表

(c) 二叉搜索树

(d) 哈希表

我的答案是使用哈希表,因为它有键和值。。。 我的回答正确吗

谢谢

(c)二叉搜索树


因为它是排序的,并且支持快速访问。

不,通常哈希表不是电话簿的最佳选择

哈希表具有出色的
O(1)
lookup性能,但它们通过很少支持按顺序浏览书籍而获得了这一性能。几乎我能想到的在电话簿中搜索内容的每一种情况都涉及到一开始就没有答案

例如,如果我想查找所有名字以“George”开头的人,我不想知道我需要查询“George Jestson”,因为这是存储在哈希表中的值


使用一个有序的数据结构,任何类型的树都允许你修剪过高或过低的值,有序列表或有序数组也是如此;但是,请避免使用有序链表,因为您仍然需要横穿链表
O(n)
才能找到条目。通过在数组上执行b-树搜索,或仅使用某种链表树,您可以做得更好。

根据要求,正确的结构是二进制搜索树。 为什么?

(a) 未排序的链表:未排序,O(n)搜索

(b) 排序链表:排序,O(n)搜索;请注意,您不能对链表应用单一或双重的二进制搜索

(c) 二叉搜索树:排序,O(logn)搜索

(d) 哈希表:未排序,O(1)搜索

(a) 和(d)由于分拣要求而被排除在外;然后(c)在搜索时比(b)快


*刚才注意到您还询问“错误选择”,这显然是(a)(未排序的链表)

哈希表可以排序吗?我不知道,…然后。。。阅读文档。这是一个很好的学习方法。你对我发布的这个问题的答案是什么?他不想给你答案。这听起来像是一个家庭作业问题。他建议你自己找到答案。如果你拥有访问“值”所需的完整“键”,那么查找性能会非常好。在任何其他情况下,这都不是正确的选择。O(1)在搜索时间中意味着什么?。。。感谢hashmaps,它实际上是摊销的O(1),这实际上意味着它将在恒定的时间内独立于地图的大小运行。。你有任何表格显示不同的操作和时间复杂度的地图,hashmap,列表,向量,二叉树等一..检查这里