`

集合set中元素判重以及hashcode的实现过程

    博客分类:
  • java
 
阅读更多
TreeSet引出的Set元素判重方法

TreeSetset中的数据元素必须实现Comparable,必须重写compareTo()方法(而不是equals())。

HashSet:比较set中元素的hashCode方式判断是否是重复的元素,故必须重写hashCode。与HashMap相同,重hashCode()时注意,当元素的一些属性发生变化时,不能改变hashCode 的值,防止一个元素数据在修改了某些属性时,hashCode改变,从而在HashSetHashMap中能放置多次,或是无法获取。

Java.util.concurrent.CopyOnWriteArraySet:线程安全,用元素的equals()方法判断重复。

Java.util.Listcontains()方法调用的是元素数据的equals()方法。

 

 

看到网上一个hashcode的实现非常不错,特在此作为记录。

n  如何写hashCode

n  1.  把某个非零常数值,比如17保存在一个叫resultint型变量中;

n  2.  对于对象中的每一个关键域f,完成下列步骤:

n  a. 为该域计算int类型的散列码c

   i.   fboolean,计算(f ? 0 : 1);

   ii.  fbytecharshortint,计算(intf

   iii. flong,计算(int)(f ^ (f>>>32))

   iv. ffloat,计算Float.floatToIntBits(f)

   v.  fdouble,计算Double.doubleToLongBits(f),对结果执行2.a.iii

   vi. f为对象引用,引用为null,返回0,否则递归调用hashCode

   vii.f为一个数组,对每个元素当作单独域递归调用上述规则.

         b.  按照下面的公式,把步骤a中计算得到的散列码c组合到result中。

                   result = 37 * result + c;

         3.  返回result

         4.  写完hashCode后,检查”是否相等的实例有相等的散列码”,不是的话,予以    修改

 

分享到:
评论

相关推荐

    java集合知识-map、set等

    记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。 一般情况下,如果自定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。 建立对象判断是否相同的依据。...

    HashCode作用_动力节点Java学院整理

    Java集合中有两类,一类是List,一类是Set他们之间的区别就在于List集合中的元素师有序的,且可以重复,而Set集合中元素是无序不可重复的。对于List好处理,但是对于Set而言我们要如何来保证元素不重复呢?通过迭代...

    实验05 Java集合.doc

    4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的...

    set集合的基本特点,set集合底层去重原理,集合怎么进行排序

    set集合是无序的相较于list集合是没有下标的,hashset底层去重,与hashCode、equals方法相关,排序的元素不是String,而是对象Person

    List和Set集合基础详解

    集合的家族(1)List集合—(有序,可重复)(2)Set集合—(无序,唯一) 一. 为什么要有集合? 集合是为了弥补数组的不足而存在。 集合相对于数组优势在于:a.集合的长度可以动态改变;b.集合中能够存放多种类型的数据。 ...

    Hibernate中文API大全

    注意,如果你定义的Set包含组合元素(composite-element),正确地实现equals()和hashCode()是非常重要的。 组合元素可以包含组件,但是不能包含集合。如果你的组合元素自身包含组件, 你必须使用标签。这是一个相当...

    【后端】java基础(4.2)java中级基础之集合——List

    和List一样,Set也可以用来存放多个元素。我们主要来学习Set的三个实现类。 HashSet TreeSet LinkedHashSet 同样,它们之间的相同点有: 都是Set的实现类 存入的元素不能重复 都是无序的(不能通过下标来查询) 他们...

    java中hashCode方法与equals方法的用法总结

    总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复

    java8集合源码分析-CollectionDemo:自己复习集合框架时候的例子

    java8 集合源码分析 ...保证唯一性:元素hashCode和equals方法。hashCode方法相同,判断equals方法 ---LinkedHashSet: 有序,是HashSet的子类 2.TreeSet: 底层是二叉树,可对元素进行排序,默认是自然顺序

    Java面试题.docx

    31、HashSet与HashMap怎么判断集合元素重复? 33、ArrayList和LinkedList的区别,以及应用场景 34、数组和链表的区别 35、开启线程的三种方式? 36、线程和进程的区别? 38、run()和start()方法区别 39、如何...

    Java服务器端开发面试.doc

    set, list, queue这些接口间的区别,set不可重复, arraylist的实现和linkedlist的实现区别,HashMap, HashTable。涉及到各种效率问题等,里面最好阅读一下源码 集合的遍历方法和使用iterator来遍历的区别,集合...

    AIC的Java课程1-6章

    第3章 面向过程(数组和方法) 4课时  理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。  清楚数组作为对象处理,创建数组对象时指定数组大小。  能够声明和操作多维数组...

    Hibernate中文详细学习文档

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

    Hibernate 中文 html 帮助文档

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.1.1. ...

    Hibernate+中文文档

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

    Hibernate3的帮助文档

    5.3. 实现equals()和hashCode() 5.4. 动态模型(Dynamic models) 6. 对象/关系数据库映射基础(Basic O/R Mapping) 6.1. 映射定义(Mapping declaration) 6.1.1. Doctype 6.1.2. hibernate-mapping 6.1.3. class...

    安卓java读取网页源码-interview:安卓面试

    怎么判断集合元素重复? String、StringBuffer、StringBuilder 之间的区别? 对反射的了解? 对注解的了解? 对依赖注入的了解? 对泛型的了解? 泛型中 extends 和 super 的区别? 对 Java 的异常体系的了解? 对...

    hibernate3.04中文文档.chm

    5.3. 实现equals()和hashCode() 5.4. 动态模型(Dynamic models) 6. 对象/关系数据库映射基础(Basic O/R Mapping) 6.1. 映射定义(Mapping declaration) 6.1.1. Doctype 6.1.2. hibernate-mapping 6.1.3. ...

    hibernate3.2中文文档(chm格式)

    4.3. 实现equals()和hashCode() 4.4. 动态模型(Dynamic models) 4.5. 元组片断映射(Tuplizers) 5. 对象/关系数据库映射基础(Basic O/R Mapping) 5.1. 映射定义(Mapping declaration) 5.1.1. Doctype 5.1.2. ...

Global site tag (gtag.js) - Google Analytics