`
ZangXT
  • 浏览: 118328 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

HashMap小测试

阅读更多

    测试HashMap代码:

  1. importjava.util.HashMap;
  2. importjava.util.Map;
  3. /**
  4. *
  5. *@authorZangXT
  6. */
  7. publicclassTest{
  8. publicstaticvoidmain(String[]args){
  9. Map<String,String>map=newHashMap<String,String>();
  10. map.put(String.valueOf(System.nanoTime())+"a","1");
  11. map.put(String.valueOf(System.currentTimeMillis())+"a","2");
  12. map.put(String.valueOf(System.currentTimeMillis())+"a","3");
  13. for(Map.Entry<String,String>entry:map.entrySet()){
  14. System.out.printf(entry.getValue());
  15. }
  16. }
  17. }

  如果对HashMap的原理有所了解的话应该会考虑到结果是不确定的,因为"1","2","3"三个串的顺序是无法确定的.
  对于HashMap重点要掌握其存储数据的方式.HashMap内部有一个transient Entry[] table;这个数组是实际用来存储数据的.需要注意的是Entry是个链式结构,后面可以链接多个Entry.table数组在构造方法中初始化,默认大小是16.
加入数据通过put方法实现.put中首先对对象的hashCode()结果进行再hash等一些列处理,得到一个index,这个index就是此对象应该存储的位置,如果table[index]中已经存在了一个要加入的对象,或者和要加入的对象equals的对象,则用新对象替换原有的对象.如果不存在,则在此位置加入该对象( 放在链表的头上) .
hash处理的过程比较麻烦,这里把代码抽取出来测试了一下: 

  1. /**
  2. *
  3. *@authorZangXT
  4. */
  5. publicclassTest{
  6. publicstaticvoidmain(String[]args){
  7. Stringstr1=System.nanoTime()+"a";
  8. Stringstr2=System.nanoTime()+"a";
  9. Stringstr3=System.nanoTime()+"a";
  10. inti1=str1.hashCode();
  11. inti2=str2.hashCode();
  12. inti3=str3.hashCode();
  13. inthash1=hash(i1);
  14. inthash2=hash(i2);
  15. inthash3=hash(i3);
  16. intindex1=indexFor(hash1,16);
  17. intindex2=indexFor(hash2,16);
  18. intindex3=indexFor(hash3,16);
  19. System.out.println(index1);
  20. System.out.println(index2);
  21. System.out.println(index3);
  22. }
  23. privatestaticinthash(inth){
  24. h+=~(h<<9);
  25. h^=(h>>>14);
  26. h+=(h<<4);
  27. h^=(h>>>10);
  28. returnh;
  29. }
  30. staticintindexFor(inth,intlength){
  31. returnh&(length-1);
  32. }
  33. }

把上面的例子多跑几次看看结果,就知道第一个例子中的原理了.

ps:自己的语言表达能力越来越差了,不知道该怎么搞.

分享到:
评论
1 楼 dreamhunter_lan 2011-09-13  

相关推荐

    hashmap-thread-test:测试 Java HashMap 是否是线程安全的

    本项目“hashmap-thread-test”显然是为了测试和展示这一特性。 ### Java HashMap 的特性 1. **非线程安全**:`HashMap`不是线程安全的,因为它没有内置的同步机制来保护并发访问。当多个线程同时修改`HashMap`时...

    hashmap dfa关键字替换

    hashmap dfa关键字替换。 附上main测试明细结果,替换时间 ok ok ok ok 。

    如何得到hashmap的索引

    ### 如何得到HashMap的索引 在Java编程中,`HashMap`是一种常见的数据结构,它提供了基于键值对(Key-Value Pair)的数据存储方式。然而,“索引”这一概念通常与数组或列表关联,而在`HashMap`中,我们通过键(Key...

    Java里多个Map的性能比较(TreeMap、HashMap、ConcurrentSkipListMap)

    - **时间复杂度**:插入、查找和删除的平均时间复杂度同样为O(log n),与TreeMap相同,但常数项较小,空间效率较高。 - **特性**:ConcurrentSkipListMap支持并发操作,多个线程可以同时进行插入、删除和查找,...

    treemap treeset hashset hashmap 简要介绍

    在代码示例中,可以看到`SmileCollections`类分别测试了`TreeSet`和`HashMap`的用法。对于`TreeSet`,虽然尝试添加了多个相同的`Student`对象,但由于`TreeSet`不允许重复元素,最终集合中只会保留一个元素。对于`...

    前端开源库-hashmap

    在压缩包`hashmap-master`中,可能包含的文件有源代码文件(如`index.js`)、测试用例(`test`目录)、文档(`docs`目录)、示例(`examples`目录)和构建脚本(`build`目录)。通过阅读这些文件,可以详细了解库的...

    学习笔记:三数组实现的HashMap

    在Java编程语言中,HashMap是一种常用的集合类,用于存储键值对数据。它提供O(1)的平均时间复杂度来插入、删除和查找元素,这得益于其内部的...在实际项目中,开发者应根据需求和性能测试结果选择最合适的HashMap实现。

    HashMap模块源码—— 高效随机存取数据结构 ,文本索引必备

    资源介绍:。1、此HashMap类采用java jdk中HashMap的实现方式。...(注意:请编译后测试效率,由于大量内存操作,编译后效率约为调试时的100倍以上。)。资源作者:。fangzhiguo。资源界面:。资源下载:。

    HashMap和链表的查找效率比较

    在Java编程语言中,`HashMap`和`List`(通常指的是`ArrayList`或`LinkedList`)是两种常用的数据结构,它们各自在不同的场景下有着不同的性能优势。本工程通过`VS2013`(Visual Studio 2013,虽然它主要用于C++开发...

    基于共享内存的hashmap

    标题中的“基于共享内存的HashMap”指的是在多进程或多线程环境中,使用共享内存作为存储机制的哈希映射...然而,由于涉及到多进程的同步,也可能带来额外的复杂性和潜在的并发问题,因此在使用时需要谨慎设计和测试。

    hashmapTest:来自java-performance.info的HashMap性能测试

    标题中的“hashmapTest”指的是一个关于Java中HashMap性能测试的项目或实验,源自java-performance.info这个网站。这个测试可能是为了分析和比较不同情况下HashMap的性能表现,包括插入、查找、删除等操作的速度以及...

    c语言 hashmap

    哈希表(Hashmap)是一种常见的数据结构,它在计算机科学和编程中扮演着重要的角色。在C语言中实现哈希表,可以帮助我们快速地存储和查找数据,尤其是在需要高效查找性能的应用场景下。本节将详细介绍如何用C语言...

    通过代码证明HashMap是线程不安全的(只用了一个Java文件)

    本篇文章将通过分析`HashMap`的源码以及编写一个简单的测试程序来证明这一点。 首先,我们要理解什么是线程安全。线程安全是指在多线程环境中,一个类或方法可以被多个线程同时访问而不会导致数据不一致或者意外的...

    基于HashMap的用户标签处理兼Java中HashMap实现原理研究.pdf

    然而,经过测试发现,IO操作频繁,效率不够高,处理完3GB数据大概要9~10小时。然后,我们考虑建立临时表,即把旧数据和新数据对比求和后插入临时表,清空存储数据表。最后,我们选择了通过HashMap归纳计算好数据后,...

    JNI 实例(含HashMap,Byt[])

    含HashMap, byte数组,String其它的类似。 测试环境 eclipse 3.4 mingw 5.16 注意加上链接参数g++ -Wall -D_JNI_IMPLEMENTATION_ -Wl,--kill-at cdt 5 jdk 5

    HashMap-master.zip_hash

    - **test**:这是一个目录,可能包含了单元测试或者集成测试的代码,用于验证HashMap的功能和性能。 - **src**:这是源代码目录,很可能包含了HashMap的实现。可以期待在这里找到Java或其他编程语言的源文件,这些...

    Go-rhh一个简单而高效的Go的hashmap包

    2. 简洁性:作为一个独立的HashMap实现,代码量小,易于理解和维护。 3. 内存效率:通过开放寻址避免了链表或平衡树的额外内存开销。 4. 扩展性:可能支持动态调整哈希表大小,以适应数据量的变化。 5. API友好:...

    Go-Go的hashmap使用加密随机种子散列提示开放寻址和罗宾汉哈希

    通常,这样的实现会提供一些额外的功能,如自定义哈希函数、负载因子调整等,以供开发者进行学习和测试。 总之,Go的HashMap在安全性和性能方面进行了优化,采用了加密随机种子来增强安全性,通过散列提示、开放...

    基于HashMap的学生管理系统

    《基于HashMap的学生管理系统详解》 在信息技术领域,数据管理是至关重要的,特别是在处理大量数据时。学生管理系统是一种常见的应用场景,它需要高效地存储和检索学生信息。本篇将深入探讨如何利用Java中的HashMap...

    scala-hashmap:Scala中的基本HashMap实现

    通过对这些知识点的学习和实践,你可以深入了解Scala编程,掌握HashMap的实现原理,以及使用现代构建工具和测试框架进行软件开发的方法。这对于提升编程技能和理解大型项目的工作流程都是非常有益的。

Global site tag (gtag.js) - Google Analytics