- 博客(11)
- 资源 (6)
- 收藏
- 关注
转载 深入解析Java对象的hashCode和hashCode在HashMap的底层数据结构的应用
一、java对象的比较 等号(==): 对比对象实例的内存地址(也即对象实例的ID),来判断是否是同一对象实例;又可以说是判断对象实例是否物理相等; equals(): 对比两个对象实例是否相等。 当对象所属的类没有重写根类Object的equals()方法时,equals()判断的是对象实例的ID(内存地址),是否是同一对象实例;该方法就是使用的等号(==)的判断结果,如Obje
2014-08-17 15:55:32 605
转载 Java HashMap 分析之四:查找和内存使用
获取元素 有了前面的分析,获取元素的逻辑就非常清晰。首先,调用者传递key,从key的hashCode方法获得值后,调用hash函数做一些低位置换,保证hash值的均匀分布,之后和size-1按位与后得到数组的位置。然后取出对应位置的链表,遍历该链表,查找hash值相等,并且key的引用或者值相等的对象,然后返回。代码见下面: [java] view plaincopy
2014-08-15 11:03:22 502
转载 Java HashMap 分析之三:放入元素
现在,有了hash code,来考虑如何计算放入数组的位置。hash code值通常会很大,但是数组的大小有限,默认只有16,大的也不能超过2的30次方。所以,用模运算来保证在数组大小范围内是合理的,比如:index = hash code % array size.不过这有点慢,JDK采用了更快的算法。这个更快的算法源于一个数学规律,就是如果size是2的N次方,那么数X对size的模运算结果等
2014-08-15 11:02:45 438
转载 Java HashMap 分析之二:Hash code
散列计算就是计算元素应该放在数组的哪个元素里。准确的说是放到哪个链表里面。按照Java的规则,如果你要想将一个对象放入HashMap中,你的对象的类必须提供hashcode方法,返回一个整数值。比如String类就有如下方法: [java] view plaincopyprint? public int hashCode() { int h = hash; int l
2014-08-15 11:02:07 477
转载 Java HashMap 分析之一:基本结构
Java的HashMap非常的常用,本篇研究它的实现算法,最后希望计算出内存占用,性能的量化数据,然后得出什么时候使用HashMap,什么时候不能滥用的结论。 HashMap实际上是一个数组,数组里面的每个元素都是一个链表。每个元素在通过put方法放入HashMap中的时候,要按照如下步骤进行: 1.根据该元素自身提供的hashcode计算出散列值,该散列值就是数组的下标 2.将新元素放入该
2014-08-15 11:01:20 414
转载 JAVA HashMap详细介绍和示例
第1部分 HashMap介绍 HashMap简介 HashMap 是一个散列表,它存储的内容是键值对(key-value)映射。 HashMap 继承于AbstractMap,实现了Map、Cloneable、java.io.Serializable接口。 HashMap 的实现不是同步的,这意味着它不是线程安全的。它的key、value都可以为null。此外,HashMap中的映射不是有
2014-08-15 10:36:33 480
原创 String的substring、split, StringTokenizer 截取字符串性能比较
package com.huawei.jvm.decorater; import java.util.ArrayList; import java.util.List; import java.util.StringTokenizer; public class MainTest { public static void main(String ... args) thr
2014-08-15 10:05:17 1154
转载 JAVA中subString以及split函数等几个函数的用法技巧
一、先说一说subString()函数 subString函数有个陷阱,有可能导致内存泄露(当然,在JDK1.7.0-B147之前这个问题一直存在,在JDK1.7.0_15-b03版本之后这个问题已经修改过来了,至于是具体中间哪个版本修改过来的,本人没有去细看) 在Java中,字符串是很复杂的一个问题,java有对字符串的优化,比如String POOL 对于Sub
2014-08-14 14:45:24 2131
转载 JAVA中堆栈和内存分配原理
JAVA中堆栈和内存分配原理 博客分类: 需学习 Java基础 1、栈、堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。) 3. 堆:存放所有new出来的对象。 4. 静态
2014-08-08 15:55:42 470
转载 ArrayList Vector LinkedList 区别与用法
最近用到了,所以依然是转载 ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,都允许直接序号索引元素,但是插入数据要设计到数组元素移动等内存操作,所以索引数据快插入数据慢,Vector由于使用了synchronized方法(线程安全)所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,按序号索引数据需要进行向
2014-08-04 10:49:36 420
转载 ensureCapacity()方法提高ArrayList的初始化速度
我们在使用Arraylist时,经常要对它进行初始化工作,在使用add()方法增加新的元素时,如果要增加的数据量很大,应该使用ensureCapacity()方法,该方法的作用是预先设置Arraylist的大小,这样可以大大提高初始化速度。 请看代码: Java代码 package test; import java.util.Arr
2014-08-04 10:48:22 554
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人