我遇到了这个面试测试问题:
一个电话有很长的字母数字排序名称列表 每个旁边的数字。它是长列表,包含10M名称和 数字。允许一次磁盘预处理。怎么会这样呢 我找到一个输入名称的数字而没有点击磁盘?
我的第一反应是将所有这些数字存储在HashMap <String, String>
中。这将O(1)
运行时访问给定名称的电话号码。不确定Map是否是存储10M记录的正确数据结构。
有没有一种有效的方法呢?
答案 0 :(得分:0)
我进行了一些性能测试,我发现HashMap
是效率最高的Java API地图(List
和Arrays
效率更高)。
一般来说,如果电话号码是连续订购的,您可以通过以下方式随机访问存储在文件中的列表:
http://docs.oracle.com/javase/tutorial/essential/io/rafs.html
还有其他一些技术(基于散列,树索引,......),它们位于域od数据库中(为此目的开发了DB)。
然而,10M元素不是那么大,通过HashMap
的内存缓存应该没问题(或多或少1-4GB)。
总结一下,如果你需要性能 HashMap
是正确的答案。的确,有几个缓存的想法是基于Map(Coherence,EHCache,Spring,...)。