map与list 为啥存储的话会优先选择map呢??
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了map与list 为啥存储的话会优先选择map呢??相关的知识,希望对你有一定的参考价值。
我正在做老师布置的项目,但是简答上边有这个问题,按照我的理解是map直接用键的方式存取速度快方便,能详细解答么?
参考技术A map是键值对应的二叉树的结构,知道键去取值是很容易的,而且map的键名是唯一的,所以存取效率很高的, list是属于链表结构,存取数据有一定随机性,常用的是利用下标来取值,而同一个下标取出来的值每次可能会不一样,所以链表结构的比较适合遍历,我所知道的大概也就这些了,希望对你有点帮助! 参考技术B ……这题目问的,实际问题实际分析嘛,什么前提都没有就选map?为啥 hash map 比 trie map 好?
【中文标题】为啥 hash map 比 trie map 好?【英文标题】:Why are hash maps better than trie maps?为什么 hash map 比 trie map 好? 【发布时间】:2011-08-01 07:51:42 【问题描述】:我所说的 trie map 是指关联数组,其中有效负载存储在 trie 而不是哈希表中。
当我使用哈希映射/表时,我使用的键通常是字符串。与某些基于 trie 的映射相比,哈希映射有哪些优势?我已经读过哈希映射更快 - 但在我看来,一致的哈希函数必须检查 (char) 数组的每个元素以获取最终哈希 - 遍历数组一次。在 trie 中,您同样必须只对数组进行一次迭代。
在我看来,在对小对象进行编码时,这确实会使用更多的内存(即使您只允许键中的小写字母字符,它是每个节点 26 个指针,并且每个键通常是多个节点),但是在另外,您永远不必担心调整大小。为什么hash map这么常见,却没见过trie map?
【问题讨论】:
【参考方案1】:如果您是 Scala 程序员,TrieMap 是“哈希数组映射的 trie 的并发线程安全无锁实现”。目前 Java 标准库中没有。
【讨论】:
【参考方案2】:Hash map 比 trie map 更常见,因为它们更通用:它们可以用于任何可散列的对象,而 trie 则适用于序列。哈希表在常见实现中也具有更好的引用局部性,因为它们将元素存储在一起。
(严格来说,每个对象都是一个位序列,但是通用 trie 将要求用户在将对象存储到 trie 之前对其进行序列化。与定义自定义哈希函数相比,这非常不方便。)
【讨论】:
其实构建树的尝试也是完全可以的。以上是关于map与list 为啥存储的话会优先选择map呢??的主要内容,如果未能解决你的问题,请参考以下文章
java的action中调用service的map集合值能调过来,但是为啥取出来就是null呢?
Java 8 Stream根据某个相同的key合并两个Map List,其他key相同时优先保留其中一个List的值