首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java指令集

    1.栈和局部变量操作 ,将常量压入栈的指令 aconst_null 将null对象引用压入栈 iconst_m1 将int类型常量-1压入栈 iconst_0 将int类型常量0压入栈 iconst_1 将int类型常量1压入栈 iconst_2 将int类型常量2压入栈 iconst_3 将int类型常量3压入栈 iconst_4 将int类型常量4压入栈 iconst_5 将int类型常量5压入栈 lconst_0 将long类型常量0压入栈 lconst_1 将long类型常量1压入栈 fconst_0 将float类型常量0压入栈 fconst_1 将float类型常量1压入栈 dconst_0将double类型常量0压入栈 dconst_1 将double类型常量1压入栈 bipush 将一个8位带符号整数压入栈 sipush将16位带符号整数压入栈 ldc把常量池中的项压入栈 ldc_w 把常量池中的项压入栈(使用宽索引) ldc2_w 把常量池中long类型或者double类型的项压入栈(使用宽索引)

    01

    HashMap在JDK1.7以及JDK1.8的区别?

    底层是以数组+单链表的形式进行存储的! 1.1.实例化:在底层直接创建Entry[]一维空数组,在第一次put元素时进行初始化和计算容量,数组长度为大于等于给定Size的最小2的次幂。 1.2.插入键值对: 当调用put(key,value)时,经历以下步骤: ①计算key的哈希值(详见我的之前一篇写HashMap底层哈希值计算的文章),然后将哈希值与数组长度-1进行按位与运算,得到应该存储的数组下标索引。 ②如果该数组位置没有Entry,则直接添加即可。 ③若该数组位置已经有Entry了,则计算key与该位置上的其他key的hash值,如果hash值都不相同,则采用头插法添加(key,value)到该数组位置。若与某个Entry中的key的hash值相同,则进一步通过equals方法进行比较,若equals相同则覆盖,若不同则采用头插法添加(key,value)到该数组位置。 1.3.扩容方式 先进行条件判断,key是否为空等等。然后准备进行Entry添加。 当数组的长度大于等于threshold且要插入的地方不为null空值时,进行扩容为原来的2倍。 扩容后需要重新计算要插入元素的hash值,并且计算在新数组长度下的索引。 1.4.Hash算法: 1.7版本会进行判断,当要插入的键值为字符串时,选用其他的hash值计算方法。并且hash值计算完之后采用复杂的避免hash碰撞的运算。hash值没有用final修饰,在进行扩容后可以重新计算。

    00
    领券