hashCode方法的详解及在集合中的作用

之前由于在大学期间没好好学习,一些基础的知识概念不甚理解,今天有时间来整理一下有关hashCode的相关知识。

1.概念

   public int hashCode()

   hashCode 方法确实会针对不同的对象返回不同的整数。(这一般是通过将该对象的内部地址转换成一个整数来实现) 即此对象的哈希值。

2.集合框架中的hashCode

   Java中的集合(Collection)有两类,一类是List,再有一类是Set

   两者区别:List元素重复,有序(插入顺序和取出顺序一致) ,Set元素不允许重复,无序

   现在问题就来了:Set如何保证元素不重复?

   设想1:通过equals(Object o) 方法遍历比较Set 中的每一个元素,如果没有重复的就插入, 如果Set中元素不断的递增,Set的add() 方法效率就非常的低,所以此设想是不可取的。

   其实Set 这时候就用到HashCode了,

   当add() 时,方法先得到元素的hashCode值,将元素插入Set中该hashcode对应的内存地址(类似一个箱子),如果该HashCode对应的内存地址上已经有元素了,就再去比较这两个元素的equals()方法,如果相等就不允许插入操作,如果不相等就放置与该内存地址的箱子中。
时间: 2024-12-24 19:19:46

hashCode方法的详解及在集合中的作用的相关文章

详解volatile在C++中的作用

volatile的介绍 volatile类似于大家所熟知的const也是一个类型修饰符.volatile是给编译器的指示来说明对它所修饰的对象不应该执行优化.volatile的作用就是用来进行多线程编程.在单线程中那就是只能起到限制编译器优化的作用.所以单线程的童鞋们就不用浪费精力看下面的了. 没有volatile的结果 如果没有volatile,你将无法在多线程中并行使用到基本变量.下面举一个我开发项目的实例(这个实例采用的是C#语言但不妨碍我们讨论C++).在学校的一个.Net项目的开发中,

jQuery(五) jQuery操纵DOM元素属性 attr()和removeAtrr()方法使用详解

jQuery操纵DOM元素属性 attr()和removeAtrr()方法使用详解 jQuery中操纵元素属性的方法: attr(): 读或者写匹配元素的属性值. removeAttr(): 从匹配的元素中移除指定的属性. attr()方法 读操作 attr()读操作. 读取的是匹配元素中第一个元素的指定属性值. 格式: .attr(attributeName),返回值类型:String.读取不存在的属性会返回undefined. 注意选择器的选择结果可能是一个集合,这里仅仅获取的是集合中第一个

jQuery操纵DOM元素属性 attr()和removeAtrr()方法使用详解

jQuery操纵DOM元素属性 attr()和removeAtrr()方法使用详解 jQuery中操纵元素属性的方法: attr(): 读或者写匹配元素的属性值. removeAttr(): 从匹配的元素中移除指定的属性. attr()方法 读操作 attr()读操作. 读取的是匹配元素中第一个元素的指定属性值. 格式: .attr(attributeName),返回值类型:String.读取不存在的属性会返回undefined. 注意选择器的选择结果可能是一个集合,这里仅仅获取的是集合中第一个

JQuery中$.ajax()方法参数详解

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项

虚方法virtual详解

虚方法virtual详解 从C#的程序编译的角度来看,它和其它一般的函数有什么区别呢?一般函数在编译时就静态地编译到了执行文件中,其相对地址在程序运行期间是不发生变化的,也就是写死了的!而虚函数在编译期间是不被静态编译的,它的相对地址是不确定的,它会根据运行时期对象实例来动态判断要调用的函数,其中那个申明时定义的类叫申明类,那个执行时实例化的类叫实例类. 如:飞禽 bird = new 麻雀();那么飞禽就是申明类,麻雀是实例类. 具体的检查的流程如下 1.当调用一个对象的函数时,系统会直接去检

php课程---Windows.open()方法参数详解

Window.open()方法参数详解 1, 最基本的弹出窗口代码   window.open('page.html'); 2, 经过设置后的弹出窗口   window.open('page.html', 'newwindow', 'height=100, width=400, top=0, left=0, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, status=no')   //该句写成一行代码   参数

$.ajax()方法参数详解

url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 delete也可以使用,但仅部分浏览器支持. timeout: 要求为Number类型的参数,设置请求超时时间(毫秒).此设置将覆盖$.ajaxSetup()方法的全局设 置. async:要求为Boolean类型的参数,默认设置为true,所有请求均为异步请求. 如果需要发送同步请求,请将此选项

TP add方法参数详解

tp add()方法参数详解: add($data='',$options=array(),$replace=false); 其中R$replace表示,是否添加数据时覆盖原有数据true表示覆盖,false表示不覆盖

解析activity之间数据传递方法的详解

转自:http://www.jb51.net/article/37227.htm 本篇文章是对activity之间数据传递的方法进行了详细的分析介绍,需要的朋友参考下 1  基于消息的通信机制 Intent--------boudle,extra用这种简单的形式,一般而言传递一些简单的类型是比较容易的,如int.string等详细介绍下Intent机制Intent包含两部分:1 目的[action]-------要去到哪里去2 内容[category.data]----------路上带些什么,