栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

JDK中的性能优化计算

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

JDK中的性能优化计算

1、Arrays的二分排序中的取中点

    ①、int mid=(low+high)/2;【会溢出不考虑使用】

    ②、int mid=low+(high-low)/2;【会避免大数溢出,一般白板写二分查找多用】

    ③、int mid = (low + high) >>> 1; 【移位运算,由于位运算直接对内存数据进行操作,不需要转成十进制,因此处理速度非常快。】

传统的方法 int mid = (left + right) /2 ,在 left 和 right 比较大的时候, 两者相加很可能超过 int 类的最大值,即发现整型溢出;
改进 int mid = left + (right - left) /2
最好的写法 int mid = (left + right) >>> 1
>>, 右移时,丢弃右边指定位数,左边补上符号位;
>>>, 无符号右移运算符,丢弃右边指定的位数,左边补上 0 。所以对负数右移,可以变成正数;

    private static int binarySearch0(float[] a, int fromIndex, int toIndex,
                                     float key) {
        int low = fromIndex;
        int high = toIndex - 1;

        while (low <= high) {
            int mid = (low + high) >>> 1;
            float midVal = a[mid];

            if (midVal < key)
                low = mid + 1;  // Neither val is NaN, thisVal is smaller
            else if (midVal > key)
                high = mid - 1; // Neither val is NaN, thisVal is larger
            else {
                int midBits = Float.floatToIntBits(midVal);
                int keyBits = Float.floatToIntBits(key);
                if (midBits == keyBits)     // Values are equal
                    return mid;             // Key found
                else if (midBits < keyBits) // (-0.0, 0.0) or (!NaN, NaN)
                    low = mid + 1;
                else                        // (0.0, -0.0) or (NaN, !NaN)
                    high = mid - 1;
            }
        }
        return -(low + 1);  // key not found.
    }

2、位运算扩容.

HashMap的tableSizeFor,实现一个数的扩容至最小的2的幂次方feb.

    
    static final int tableSizeFor(int cap) {
        int n = cap - 1;
        n |= n >>> 1;
        n |= n >>> 2;
        n |= n >>> 4;
        n |= n >>> 8;
        n |= n >>> 16;
        return (n < 0) ? 1 : (n >= MAXIMUM_CAPACITY) ? MAXIMUM_CAPACITY : n + 1;
    }

3、HashMap的获取hash.

 JDK 源码中 HashMap 的 hash 方法原理是什么?

    static final int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

 陆续更新. 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/762992.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号