java - “散列”比“线性”搜索更有效吗?
问题描述
我决定修改 Java 集合框架,所以我从内部实现开始。一个问题出现在我的脑海中,我无法解决。希望有人可以对以下内容做出明确的解释。
ArrayList 使用线性或二分搜索(两者都有优点/缺点),但我们可以用它们做任何事情!我的问题是为什么所有“散列”类(如 HashMap fe)都使用散列原理?例如,他们不能解决线性或二分搜索吗?为什么不将键/值对存储在数组中?相反,为什么不(例如 ArrayList 存储在 hashTable 中)?
解决方案
集合框架的目的是程序员将选择适合用例的数据结构。根据您使用它的目的,不同的数据结构是合适的。
正如您所说,散列类使用散列原理,因为如果您选择它们,那么这就是您想要使用的。(散列通常是简单、直接查找的最佳选择。)螺丝刀使用拧螺丝原理,因为如果你拿起螺丝刀,你想把东西拧进去;如果你有钉子需要钉进去,你就会拿起锤子。
但是,如果您不打算执行查找,或者如果线性搜索对您来说足够好,那么 anArrayList
就是您想要的。将哈希表添加到永远不会使用它的集合中是不值得的,并且它会花费 CPU 和内存来执行您不需要的事情。
推荐阅读
- android - GDPR 后的 InMobi 广告 SDK 错误
- java - 子项目未编译 Java/Android Studio
- javascript - 我的第一个使用 PHP 和 JavaScript 的联系表 - 无页面重定向
- python - 我应该直接访问 Python 类变量还是使用类函数?
- php - 此 PHP 安装不提供 GD 库扩展
- c++ - 具有更多衍生任务的 TBB 递归链式反应
- javascript - 从自定义服务订阅下载地址
- javascript - 等待第二个承诺
- java - 如何使用 ormlite 保存嵌套在另一个对象中的对象?
- c++ - 尝试在 C++ 中的静态函数内使用构造函数创建对象