为速度而散列
来源:互联网 发布:电脑无法上淘宝视频 编辑:程序博客网 时间:2024/05/01 16:09
查找某一个键,你能想到的是使用for循环逐个遍历存储key的集合,然而这是我们能想到的最低效率的方法。当然你也可能想到把key排序,然后使用Collections.binarySearch()二分查找。散列更近一步,数组是查询速度最快的数据结构,但数组是不能调整容量的,这可怎么办呢?答案就是:数组并不保存键本身,而是通过键对象生成一个数字,将其作为数组的下标。这个数字就是散列码,生成散列码的方法就叫做散列函数。
问题来了:这个时候数组容量固定的限制依然没有解决;如果不同的键产生相同的下标这么办?通常是可以固定数组容量然后把数组元素改成list集合来解决冲突问题。如果散列函数比较完美,数组的每个位置都只有较少的值。这便是HashMap会如此快的原因。(注:对于发生冲突后,可能会有另一个散列函数根据键对象的其他内容生成另外的散列码,改散列码决定了键在list中的位置。)
HashMap :基于散列表的实现,取代了Hashtable
LinkHashMap: 类似HashMap,比HashMap慢一点,迭代遍历时取得键值对的顺序是其插入次序,或者是“最近最少使用LRU”的次序
TreeMap:基于红黑树的实现(让你们平时不学数据结构^-^)查找键时,他们会被排序(次序有Comparable或Comparator决定)TreeMap的特点在于所得到的结果是进过排序的,TreeMap是唯一带有subMap方法的Map,它可以返回一个子树
0 0
- 为速度而散列
- 画质速度通吃 浅谈为游戏而生的SM3技术
- 【ThinkingInJava】53、为了提高速度,我们使用散列
- 还在为寝室路由器不给力,上网速度缓慢而纠结吗?且听博主分解
- 画质速度通吃 浅谈为游戏而生的SM3技术(Dx9的一些技术) -ok
- 以速度为目标
- 为事业而学习
- 为生活而挣扎
- 为盈利而测试
- 任性而为
- 为可变而设计
- 为爱而疯?
- 为评估而忙碌
- 为可测性而设计
- 为软件而努力
- 为下载而来
- 为粮食而奋斗
- 为JAVA而担忧
- iOS 键盘类型
- java发送http post请求
- MyBatis Generator 详解
- opencv ffmepg 播放视频
- 动态库的查找路径
- 为速度而散列
- Masonry基本用法
- JSON数据 json.stringify()用法详解
- 文章标题
- Myeclipse使用常见问题汇总
- Freemaker初接触(一) 集成SpringMVC问题
- Java+eclipse+MySQL的配置
- 解决Ubuntu 14.04下Genymotion不能打开问题
- virtualbox相关问题系列