`
风筝曲
  • 浏览: 3281 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

HashMap学习总结

 
阅读更多

HashMap 学习总结

算是我自己对自己的学习一次总结吧

学习那些新知识:

1.   JAVA 运算符 带符号左移(<<) ,带符号右移(>>) ,无符号右移(>>>)

代码如下:

public class Test1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int a=3;
		a<<=4;
		int b=-3;
		b>>=1;
		int c=35;
		c>>=2;
		int d=-3;
		d>>>=1;
		System.out.println("a="+a);
		System.out.println("b="+b);
		System.out.println("c="+c);
		System.out.println("d="+d);
	
				
	}

}

 

???????????????????

2.   在计算机操作系统中,数值的存储一律用补码来表示。使用补码,可以将符号位和其他位统一处理调用,减法可通过加法来表示。

在学习其中,对模的有了另一层理解。模是指一个计量系统的计数范围。以钟表为例,钟上有12 个小格,每格代表一个小时,假设现在是8 点,但钟上指针指的是4 点,那么你需要调整时间,你可以

顺时针调整 即将时针向下拨4 个小时

逆时针调整 即将时针反向调8 个小时

8 4 互补,时钟的模即为12. 同理,我们的32 位数的模是多少呢,2^32.

我们是如何求一个负数的补码的呢,每一位取反加一,其实是等同于用2^32-| 负数|

17 的补码 0000 0000 0000 0000 0000 0000 0001 0001

-17 的补码1111 1111 1111 1111 1111 1111 1110 1110

如果你把-17 的补码当成是无符号整数,你会惊奇的发现两者相加刚好等于2^32 ,这里就不算了,有条件的孩子,可以自己试试。

关于学习HashMap

Iteye 上已经有很多关于HashMap 源代码的实现的讲解了,这里我就不多说了。

这里我想说说HashMap 的巧妙之处和一些我在学习中的疑问

如何处理HashMap 中不同长度字符串key 在数组中的存储位置???

这个要说一下HashMap 中存储机制,HashMap 虽然以Entry<key,value> 作为最基本的单位来存储。但HashMapputkey,value )函数存入数组entry[] 中的索引与value 完全没有关系,可以把value 看做是key 的一个附带值。

HashMap 中获得Index 的步骤是

1.   获得每个key hashcode

2.   求的每个key 值得hash

Int hash=hash(key.hashcode());

这里又要说说hash 值得特别之处了。

下面是hash 函数的源代码

1.   static int hash(int h)   

2.   {   

3.       h ^= (h >>> 20) ^ (h >>> 12);   

4.       return h ^ (h >>> 7) ^ (h >>> 4);   

5.   }   

不管字符串的长度是多少,他的hash 值都会是一个固定长度的数字,而且如果两个数字的hash 值不同,那么他们的key 值一定不同,如果相同,他们的key 值有可能不同。而且hash 值会均匀分布每个key 值得hash 值。

先看个例子,一个十进制数32768( 二进制1000 0000 0000 0000) ,经过上述公式运算之后的结果是35080( 二进制1000 1001 0000 1000) 。看出来了吗?或许这样还看不出什么,再举个数字61440( 二进制1111 0000 0000 0000) ,运算结果是65263( 二进制1111 1110 1110 1111) ,现在应该很明显了,它的目的是让“1” 变的均匀一点,散列的本意就是要尽量均匀分布。

3.   获得key 值得索引值

int i = indexFor(hash, table.length);  

获得了固定长度的hash 值后,我们也必须要保证他的索引值小于数组长度,这就必须通过与数组长度AND 了。

下面是源代码

1.   static int indexFor(int h, int length) {  

2.          return h & (length-1);  

3.      }  

 

分享到:
评论

相关推荐

    algorithm004-01#algorithm004-01#HashMap学习总结1

    通过hash函数计算的结果与capacity-1进行且运算,得到buckets的index,若buckets[index]为空,则直接赋值,若不为空,首先查看首

    Java集合专题总结:HashMap 和 HashTable 源码学习和面试总结

    Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...

    用HashMap模拟一个网上购物车

    此外,我们还将学习如何使用`Scanner`类从键盘接收用户输入。 #### 二、实验需求分析 根据题目要求,我们需要完成以下任务: 1. 创建一个包含五本书信息的数据结构。 2. 每本书的信息包括书名(名称)、单价以及...

    电话本管理系统HashMap实现

    总结一下,电话本管理系统使用HashMap实现的优势在于其快速的查找和操作性能。通过理解和运用HashMap的机制,我们可以构建出一个高效、易维护的电话本系统。在实际开发中,了解和掌握HashMap的内部原理对于优化代码...

    HashMap二级词典

    总结来说,"HashMap二级词典"是一个利用`HashMap`高效存储和查询单词的应用,通过两级`HashMap`结构,提高了数据检索的效率。同时,它也涉及到了文件I/O操作和错误处理,这些都是Java开发中常见的技能。对于学习和...

    hashmap中hash函数的构造问题

    这些函数都具有良好的性能特点,可以作为学习和实践的参考。 ##### 1. SDBMHash ```cpp unsigned int SDBMHash(char* str) { unsigned int hash = 0; while (*str) { hash = (*str++) + (hash ) + (hash ) - ...

    java 并发学习总结

    本学习总结将深入探讨并发容器、同步容器、同步工具、死锁、异常处理、线程中断、线程池、返回结果以及同步方法等核心概念。 1. **并发容器**:Java提供了一系列的并发容器,如`ConcurrentHashMap`,它在并发环境下...

    jsp学习总结适合学生看的

    **JSP 学习总结** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML中嵌入Java代码,以实现服务器端的程序逻辑。对于初学者来说,掌握JSP的基础知识和核心概念至关重要。 ### JSP 开发Web应用系统 ...

    双关键字HashMap

    总结来说,这个压缩包提供的是两个不同实现的双关键字HashMap,它们扩展了标准HashMap的功能,以支持基于两个关键字的查找。这对于学习和理解数据结构以及如何在Java中实现自定义集合类非常有帮助。开发者可以根据...

    corejava集合框架学习总结.pdf

    ### 核心Java集合框架学习总结 #### 一、概述 在Java编程语言中,集合框架是一组用于存储和操作对象的接口和类。这些接口和类提供了多种数据组织方式,如列表、集合并和映射等。本篇文章将重点介绍集合框架中的几...

    java学习总结

    Java学习总结是一个全面而深入的过程,它涵盖了编程基础、面向对象设计、集合框架、多线程、网络编程、I/O流、数据库操作、异常处理、反射机制、JVM优化等多个方面。以下是对这些知识点的详细阐述: 1. **Java编程...

    520_学习总结_第二周1

    在第二周的学习总结中,主要涵盖了哈希表、映射集合、图、二叉树、递归、分治和回溯等核心概念。这些知识在IT领域,尤其是编程和算法设计中扮演着重要角色。 哈希表是一种数据结构,通过哈希函数将元素映射到特定...

    java实现运用hashmap充当购物车goodbean充当存放数据.pdf

    在本资源中,我们将学习如何使用 Java 语言实现一个简单的购物车系统,其中使用 HashMap 来存放用户想买的商品信息。下面是该资源中的知识点总结: ConnDB.java ConnDB.java 是一个用于连接数据库的类,该类中...

    (转)java学习总结

    【标题】:“(转)Java学习总结” 这篇“Java学习总结”显然是一位程序员在学习Java编程语言过程中的心得体会。Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司的一部分)于1995年...

    java学习笔记总结

    这份“java学习笔记总结”涵盖了作者在深入学习Java过程中积累的知识点和实践经验,旨在帮助读者理解和掌握Java的核心概念。 首先,Java的基础部分包括语法、变量、数据类型、运算符和流程控制。Java支持八种基本...

    java-se 学习总结项目 Java学习资料

    这个"java_se 学习总结项目"包含了丰富的Java学习资料,旨在帮助开发者深入理解Java编程语言,提升技能。以下是对这个项目中可能包含的知识点的详细说明: 1. **Java基础**: - **语法特性**:包括变量、数据类型...

    全面的Java学习总结笔记

    这份"全面的Java学习总结笔记"包含了从基础到高级的大量知识点,旨在帮助学习者构建坚实的Java编程基础。 首先,Java的学习始于基础。这包括理解Java语言的基本语法,例如变量、数据类型(如整型、浮点型、字符型和...

    JAVA学习总结

    【JAVA学习总结】 Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现已被Oracle公司收购)于1995年推出。它的设计目标是具有跨平台性、可移植性、安全性和高效性,使得“一次编写,到处运行”成为...

Global site tag (gtag.js) - Google Analytics