• HashMap相关 (根据hashMap散列表长度 找出HasMap key 对应索引相同的值)


    找出HasMap key 对应索引相同的值

    HashMap 散列表的 散列值获取方式

    hashMap的哈希值(散列表值)获取的方式是:获取hashCode 并与 hashCode左移16位 做异或运算 , 得出的值再和 hashMap的散列表数组长度 做& 与运算 ,得出hashMap key对应的 散列表值

    java 中的hashCode 值针对这个java Object 的, jvmnew一个Object 都会把 这个object 丢到一个散列表中
    后面获取/做对比这个object对象 再根据这个hashCode值 从Hash表(散列表)那处理

    hashMap 散列表解决冲突

    0.75 这个是填装因子 HashMap 底层思想是散列表 哈希表)
    散列表 给一个标识 key 通过散列函数 计算出 数组索引
    不同的key 散列函数返回相同的值 ,这种情况属于冲突, 好的散列表应该是避免冲突的 其中避免方法之一是:设置较低的填装因子 (散列表包含的元素 除于 位置总数) 12/16 =0.75
    填装因子越低 发生冲突的可能性越小
    所以 散列表 填装因子超出 0.75 就开始扩容

    HashMap 返回HashMap key索引对应的值

    public class SomeThing11 {
        public static void main(String[] args) {
            int i = 0;
            Map<Integer,ArrayList<String>> oldMap = new HashMap<>();
            do{
               // 我这里设置 散列表长度为64
                getMapArrIndex(64,String.valueOf(i),oldMap);       
    	
    		 }while (++i < 10000);
    
    
            Map<Integer,ArrayList<String>> newMap = new HashMap<>();
            for (Integer index : oldMap.keySet()) {
                if (oldMap.get(index).size() >=8) {
                    newMap.put(index,oldMap.get(index));
                }
            }
            newMap.get(0);
        }
    
        /**
         * 这里取的hashMap 数组长度为默认长度16
         * 如何要设置其他的 可设置为变量
         * @param key  为 hashMap 索引值相同的key集合
         * @param map  Map>  key为模拟hashmap 得出的数组索引下标值,value 为 hashMap 索引值相同的key集合
         */
        public static  void getMapArrIndex(int tableLength,String key,Map<Integer, ArrayList<String>> map){
            int n =(16 - 1) & hash(key);
            if (!map.containsKey(n)) {
                map.put(n,new ArrayList<String>());
            }
            map.get(n).add(key);
        }
    
    
        /**
         * HasMap  key的hashMap hash值
         * @param key
         * @return
         */
        static  int hash(Object key) {
            int h;
            return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
            
            }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
  • 相关阅读:
    理解 std::thread::join
    C++&QT day7
    【android】当数据库需要更新时我们该怎么办?
    Maximum And Queries (easy version)
    Pytorch入门实战 P07-搭建vgg16模型
    如何在 Windows 10 中安装 Azure Data Studio 1.39.1
    leetcode 343 整数拆分
    【反射】Class类
    MATLAB非均匀网格梯度计算
    Python flask使用ajax上传文件
  • 原文地址:https://blog.csdn.net/weixin_43064364/article/details/126167433