`
Yinny
  • 浏览: 295842 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

HashMap源码学习分享心得

阅读更多
[size=medium]今早在团队内分享了<通过 HashMap、HashSet 的源代码分析其 Hash 存储机制>,觉得自己又对hashMap的存储机制加深了了解,在分享会上大家讨论讨论的其中一个问题是:hashMap里的indexFor(int h, int length)方法为何不用取模的方式实现而是用&运算实现?当时讨论的结果是%运算比&运算更加耗费时间,下来之后我写了一个方法来印证一下:
package com.tina.jdk;

/**
 * @author tina.wyn
 *
 */
public class TestIndexFor {
	
	static int indexForWith(int h,int length){
		return h & (length-1);
		
	}
	
	static int indexForWithMod(int h,int length){
		return h % length;
		
	}
	
	public static void main(String[] args) {
		long t1 = System.currentTimeMillis();
		for (int time = 0; time < 100000; time++) {
			for (int i = 0; i < 100; i++) {
				int a = indexForWith(i,16);
			//	System.out.println(a);
			}
		}
		long t2 = System.currentTimeMillis();
		System.out.println("使用与运算所耗时间为:"+(t2-t1) );
		
		long t3 = System.currentTimeMillis();
		for (int time = 0; time < 100000; time++) {
			for (int j = 0; j < 100; j++) {
				int b = indexForWithMod(j,16);
			//	System.out.println(b);
		}
		}
		long t4 = System.currentTimeMillis();
		System.out.println("使用模所耗时间为:"+(t4-t3) );

	}

}
result:
使用与运算所耗时间为:16
使用模所耗时间为:31
------------------------------
使用与运算所耗时间为:0
使用模所耗时间为:47
------------------------------
使用与运算所耗时间为:16
使用模所耗时间为:47


最终得到的结果是:无论是用%还是&运算,都可以根据hash值来得到在table中相同的索引位置,但是如果需要被运算的hash值足够多的话,&运算的效率比%运算要高很多,上面的代码里反复执行了1W次,结果都是&运算比较节省时间。[/size]
分享到:
评论

相关推荐

    Java相关技术的源码学习心得

    在深入探讨Java源码学习心得之前,我们先要理解Java作为一种多用途、面向对象的编程语言,其广泛应用于企业级应用、移动应用、云计算、大数据等领域。Java的源码是理解其工作原理的关键,这对于提升编程技能、解决...

    s1java总结ava学习心得

    "赵圣杰java学习心得.txt"文件可能包含了赵圣杰在Java学习过程中的具体体验和技巧分享,可能包括他在学习过程中遇到的问题、解决问题的方法,以及个人的学习策略。通过阅读他的心得,你可以借鉴他的经验,避免一些...

    一个老鸟的java学习心得.docx

    【Java学习心得】 Java是一种广泛使用的面向对象的编程语言,对于初学者来说,掌握Java的基础和进阶知识至关重要。以下是我作为一个经验丰富的开发者在Java学习过程中的几点心得体会: 1. **基础牢固**:学习Java...

    java的一些学习心得

    【Java学习心得】 Java是一种广泛使用的面向对象的编程语言,其设计目标是有着严格的类型检查、垃圾回收机制、并且能够编写一次,到处运行。在学习Java的过程中,我深刻体会到其强大的平台无关性和丰富的类库对开发...

    study1010_bursttpf_java学习_源码.zip

    6. **交流讨论**:与他人分享学习心得,通过讨论解决疑惑,共同进步。 总之,这个名为"study1010_bursttpf_java学习_源码.zip"的压缩包提供了丰富的Java学习素材,无论是初学者还是有经验的开发者,都能从中受益。...

    jdk1.8 src源码包

    - **交流讨论**: 与其他开发者分享学习心得,互相答疑解惑,共同进步。 总的来说,JDK 1.8的源码包是一份宝贵的教育资源,它为我们揭示了Java语言背后的复杂性和精妙之处,是每一位Java开发者进阶的必经之路。无论...

    Java官方英文版源码

    - **参与社区**:加入Java开发者社区,讨论源码中的问题,分享学习心得。 总之,Java官方源码是一本无价的教科书,它不仅揭示了Java平台的内部运作,也为开发者提供了深入学习和优化代码的宝贵资源。通过深入研究...

    基于Java的网课学习笔记设计源码

    8. **博客系统**:"blog4"文件可能关联到一个内置的博客模块,允许用户分享学习心得或者发布教学资源。这需要理解Web内容发布系统的基本架构和实现方式。 9. **版本控制**:虽然未直接提及,但一个良好的开发实践中...

    创建学习APP项目,包含Java基础,Android,源码解析等

    7. **社区交流**:集成社交功能,允许用户提问和分享学习心得,可考虑使用Firebase Realtime Database或Firestore实现数据同步。 通过以上内容,我们可以看到Java基础、Android技术和源码解析在构建学习APP项目中的...

    JAVA源码笔记

    这份"JAVA源码笔记"集合了作者从零开始学习Java时,通过观看网络视频并结合实践所整理的一系列源码和学习心得。这不仅有助于加深对Java语言的理解,也能帮助初学者建立良好的编程思维。 首先,我们要明白Java是一种...

    java源码解读-jdk_reading:java源码日常阅读与注解

    4. 深化设计模式:通过源码学习,可以发现并掌握更多的设计模式和最佳实践。 二、源码解读的关键领域 1. 类加载器(ClassLoader):理解类如何被加载到JVM中,以及类加载的双亲委派模型。 2. 集合框架(Collections...

    (转)java学习总结

    这篇“Java学习总结”显然是一位程序员在学习Java编程语言过程中的心得体会。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年推出。它以其“一次编写,到处运行”的...

    看牛人如何学习JAVA(重新上传)

    "牛人如何学习JAVA.txt" 这个文件很可能包含了一位经验丰富的Java开发者的自学方法和心得。通常,学习Java的第一步是理解基础概念,包括变量、数据类型、运算符、流程控制语句等。然后,深入学习类与对象,这是面向...

    openjdk-analysis:jdk源码阅读

    - **分享与写作**:将学习心得整理成文章,分享给他人,巩固自己的知识。 总的来说,OpenJDK源码阅读是一项系统且深度的技术探索,它涉及到Java语言的方方面面,对于Java开发者来说,这是一次难得的学习机会,也是...

    JavaSourcesLearn:JDK原始码学习

    JavaSourcesLearn是一个专注于JDK源码学习的项目,它提供了对Java开发工具包(JDK)源代码的深入理解和分析。...此外,参与开源社区,与他人交流学习心得,也是不断提升自我、拓宽视野的有效途径。

    JavaSourceLearn:做Java的相信大家都知道JDK源代码是必须要亲自去学习的,类似锁,并发容器等的实现。这也是大厂面试的高频考点。心得,可以直接fork查阅

    因为笔者想要学习JDK中常用容器(ArrayList,HashMap,分段副本,ConcurrentHashMap等),锁等最常用工具的具体实现; JDK原始码初学难以看懂,需要不断反复,但是看的过程中不能做笔记,下次又忘了,反反复复效率...

    java编程思想

    通常,这样的博客会分享阅读心得、关键知识点的总结,甚至是对某些复杂概念的个人解读。 标签“源码”和“工具”提示我们,这本书不仅涵盖了Java语言的基础语法,还可能深入到源码层面,讲解如何通过分析和理解Java...

    Java 推荐读物与源代码阅读

    6. **参与社区**:加入相关的开发者社区或论坛,与其他开发者交流心得,可以获得更多的学习资源和支持。 #### 四、Java集合框架详解 Java集合框架主要包括三个核心部分:接口(Interface)、实现(Implementation...

    合肥工业大学java实验报告(所有,共三次).zip

    此外,实验报告中的源码分析和心得体会部分,可以帮助学生深入理解代码背后的逻辑,提升问题解决和自我学习的能力。实验截图则为理解和复现过程提供了直观的辅助。总的来说,这是一个系统性、全面性的Java学习实践,...

    一个计算机专业学生几年的编程经验汇总

    #### Java 学习心得与技巧分享 作为一个计算机专业的学生,在过去的学习过程中,对于 Java 编程语言有了较为深入的理解与实践。下面将分享一些个人的经验与感悟,希望能够帮助到同专业的同学们。 #### 一、Java ...

Global site tag (gtag.js) - Google Analytics