HashMap为什么比数组查询快

  通常数组不直接保存值,而是通过保存值的list。然后对list中的“值”使用equals方法比较,这部分查询速度自然慢。但是如果有好的散列函数,数组的每个位置就只有较少的“值”。因此,不是查询所有的list,而是快速跳到数组的某个位置,只对很少的额元素进行比较,这就是HashMap会如此之快的原因。

  这里解释一下数组的“键”,数组并不保存键本身,而是通过“键”对象生成一个数字,将其作为数组的下标索引。这个数字就是散列码,有定义在Object中的hashcode生成(也称散列函数)。你的类总是应该重载hashCode方法。为数组容量被固定的问题,不同的“键”可以产生不同的下标。也就是说,可能会有冲突。因此数字多大就不重要了,每个“键”总能在数组中找到他的位置。

原文地址:https://www.cnblogs.com/xiemingjun/p/9675930.html

时间: 2024-10-03 12:35:34

HashMap为什么比数组查询快的相关文章

9、数组查询和冒泡排序算法

package com.xxx.xxx; import java.util.Arrays; public class demo10 { /** * 1.数组查询 * 2.冒泡数组排序 * @param args */ public static void main(String[] args) { //1.数组查询 /** * binarySearch(Object a[],Object key) 用的时候要先进行排序,如果没排序,则返回的结果是不确定的 * a 要搜索的数组 * key 要搜索

Mongodb 数组查询

插入多条测试数据> for(i=1;i<=1000;i++){... db.blog.insert({"title":i,"content":"mongodb测试文章.","name":"刘"+i});                                                      ... } db.blog.list.find().limit(10).forEach(

二维数组查询算法

题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 实现思路:由于行列都为递增排序,所以可以从左下角开始比较查询,若目标值target大于该数,则将查询位置右移,否则上移,即可达到查询目的. 代码: 1 #_*_coding:utf-8_*_ 2 3 class Solution: 4 # array 二维列表 5 def Find(self, target, array):

【MongoDB学习笔记17】MongoDB的查询:find中的数组查询

db.post.find()    { "_id" : ObjectId("54a530c3ff0df3732bac1681"), "id" : 2, "name" : "joe", "age" : 30, "sex" : 1, "school" : "marry" }     { "_id" : Objec

CharsRefIntHashMap并不比HashMap&amp;lt;String, Integer&amp;gt;快

我模仿lucene的BytesRef写了一个CharsRefIntHashMap,实測效果并不如HashMap<String, Integer>.代码例如以下: package com.dp.arts.lucenex.utils; import org.apache.lucene.util.CharsRef; public interface CharsRefIntMap { public static abstract class CharsRefIntEntryAccessor { pub

线上一个数组查询遇到的坑

背景 中午12点半,接到了线上MongoDB 数据库异常的告警通报: "CPU不间断飙升到百分百,业务也相应出现了抖动现象." 通过排查数据库主节点的日志,发现了这样的一个慢语句: 2019-03-07T10:56:43.470+0000 I COMMAND [conn2544772] command nlp.ApplicationDevice appName: "nlp" command: find { find: "ApplicationDevice&

php 总结(14) 每个客服当月每天的资料查询,多重数组查询

思路  涉及到多重数组,当用户选择那一个月,某一个客服的时候 客服 当月每天 以及总的资料查询.1.一个月内每天的时间戳生成数组: for($i=0;$i<$j;$i++){ $date_array[] =array($start_time+$i*86400,$start_time+($i+1)*86400); //每隔一天赋值给数组 } $date_array[99]=array($thismonth_begin,$thismonth_end); 2.查询这个月内有数据的客服: $kefu[]

HashMap中确定数组位置为什么要用hash进行扰动

HashMap数据存储的过程先根据key获得hash值,通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度),如果当前位置存在元素的话,就判断该元素与要存入的元素的 hash 值以及 key 是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突. 其中,jdk1.8中扰动函数hash的源码: static final int hash(Object key) { int h; // key.hashCode():返回散列值也就是hashcode //

pgsql中json格式数组查询结果变成了字符串

场景复原 最近使用到了json的数组,用来存储多个文件的值,发现在连表查询的时候返回结果变成了字符串. { "id": "repl-placeholder-007", "sn": "63165580943163393", "name": "1212", "implementPlanID": "2632920653191188481", "