如何解决“哈希”比“线性”搜索更有效吗?
我决定修改Java收集框架,因此我从内部实现开始。我想到一个问题,我无法解决。希望有人可以对以下内容做出清晰的解释。
ArrayList使用线性或二进制搜索(都有优点/缺点),但是我们可以用它们做任何事!我的问题是,为什么所有“散列”类(例如HashMap f.e.)都使用散列原理?例如,它们不能通过线性搜索还是二进制搜索来解决?为什么不将键/值对存储在数组中?相反,为什么不这样做(例如,将ArrayList存储在hashTable中)?
解决方法
集合框架的目的是程序员将选择适合于用例的数据结构。根据您使用它的目的,不同的数据结构是合适的。
散列类使用散列原理,正如您所说的那样,因为如果选择它们,那么这就是您要使用的。 (通常,哈希是进行简单,直接查找的最佳选择。)螺丝起子采用了拧紧原理,因为如果您拿起螺丝起子,则想拧入一些东西。如果您有钉子需要插入,则应该拿起锤子。
但是,如果您不愿意执行查找操作,或者线性搜索对您来说足够好,那么ArrayList
就是您想要的。将哈希表添加到永远不会使用的哈希表中是不值得的,并且花CPU和内存来执行不需要的操作。
我有一个很大的值散列(约1,500)。代码的本质是,一旦加载了哈希图,就永远不会更改它。每个网页都对哈希表进行了多次访问,我想知道是否可以加快哈希表的速度以加快页面加载速度。
有一天我有一段时间,所以我做了一系列的时间测试(使用纳秒时间功能)。然后,我将哈希图的使用重新设计为数组。不是ArrayList,而是实际的array []。我将索引与用于获取哈希值的键类存储在一起。
有所不同,数组查找速度更快。我计算过,在一天的活动中,我几乎可以节省一整秒!
是的,使用数组比使用哈希YMMV更快:-)
然后我将代码恢复为使用哈希图,因为它更易于维护...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。