`

集合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后,检查”是否相等的实例有相等的散列码”,不是的话,予以    修改

 

分享到:
评论

相关推荐

    set接口经常用的hashCode和equals方法详解

    在Java编程语言中,`Set`接口作为集合框架的重要组成部分,在实现无重复元素的数据结构方面扮演着关键角色。为了确保元素的唯一性,`Set`接口依赖于对象的`hashCode`和`equals`方法。本文将深入探讨这两个方法在`Set...

    java集合知识-map、set等

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

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

    如果Set集合中的元素不是String,而是自定义的`Person`对象,那么我们需要让`Person`类实现Comparable接口或者提供一个Comparator来控制排序规则。在`Person`类中实现`compareTo(Person other)`方法,可以根据`...

    JavaSE专题-Set集合.doc

    LinkedHashSet是Set集合中的一种有序且唯一的实现类,特点是能够按照元素的添加顺序来存储元素。它的存储原理是通过链表来实现的,具有很高的存储效率和查询效率。 在使用LinkedHashSet时,需要掌握的是如何存储...

    集合概述set、List、Map

    迭代器(Iterator)接口用于遍历集合中的元素,它是集合框架的一部分,提供了一种方式来访问集合元素,而不暴露底层的数据结构。 - `hasNext()`:判断集合中是否有下一个元素。 - `next()`:返回集合中的下一个元素。...

    hashCode的作用

    在Java集合框架中,许多数据结构如`HashSet`、`HashMap`等依赖于`hashCode`方法来实现高效的数据存储与检索。这些集合通过对象的`hashCode`值将其分配到特定的桶(bucket)中,从而实现快速查找。例如,在`HashSet`中...

    Java集合Collection、List、Set、Map使用详解

    - `contains(Object o)`:检查集合中是否包含指定的元素。 - `isEmpty()`:检查集合是否为空。 - `size()`:返回集合中的元素数量。 - `clear()`:清空集合中的所有元素。 ##### 1.2.2 迭代器 迭代器(Iterator)...

    离散数学作业 JAVA实现集合及其运算

    - **equals()**和`hashCode()`:比较两个集合是否相等,以及计算哈希值。 通过这个离散数学作业,你可以深入理解`HashSet`的特性和操作,同时锻炼了使用集合框架解决问题的能力。实践这些基本操作有助于提高编程...

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

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

    Java-Java集合体系-List-Set

    理解并熟练运用Java集合体系中的List、Set、Map接口及其实现类,对于日常开发和面试来说至关重要,因为它们是许多Java框架和库的基础。在实际项目中,根据需求选择合适的集合类型可以提高代码的效率和可维护性。在...

    List Set Map以及子类的比较 .docx

    HashSet 存储元素不重复的原理是:首先调用 hashcode 方法,判断数组中是否有 Hash 代码相同的,如果没有,就添加。如果有,就再调用 equals 方法,和 Hash 代码相同的元素比较,元素是否相同。 在选择集合类时,...

    实验05 Java集合.doc

    在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见实现类。 1. **Set接口**:Set接口代表了一个不允许有重复元素的集合。实验中提到了两个主要的实现类:HashSet和TreeSet。...

    JAVA集合(List,Set,Map)

    本篇文章将深入探讨集合框架中的三大核心组件:`List`、`Set`以及`Map`,并通过具体的接口和类来分析它们的特点和应用场景。 #### 集合接口 在Java集合框架中,主要有以下几种关键接口: - **`Collection`接口**:...

    java中set接口使用方法详解

    在Java编程中,Set接口是集合框架的一部分,它继承自Collection接口,主要用于存储不包含重复元素的集合。Set接口的实现类主要有HashSet、TreeSet和LinkedHashSet,它们各自有不同的特性和使用场景。 1. **HashSet*...

    对Java中Set的深入研究.pdf

    Java中的Set接口是基于集合概念实现的,它不包含重复元素。Set接口继承自Collection接口,并且不保证集合中元素的顺序,某些Set实现可能会按照插入顺序或特定规则排序。以下是对Java Set实现的一些深入讨论: 1. **...

    Java中Set的深入研究

    在深入探讨Java中Set接口...通过以上分析,我们可以看到,虽然Set接口本身很简单,但是它的实现却涉及到了哈希表、链表、红黑树以及线程安全等多种数据结构和算法概念,这些是Java开发者深入了解和掌握集合框架的基础。

    CustomSet.zip

    在Java编程语言中,HashSet是一种常用的集合类,它实现了Set接口,不包含重复元素,并且不保证元素的顺序。在给定的“CustomSet.zip”压缩包中,我们看到一个名为“CustomSet.java”的文件,这很可能是用户自定义的...

    Set实现类1

    Set是Java集合框架的一部分,主要用于存储不重复的元素。它有多种实现类,如HashSet和TreeSet,每个类都有其特定的特性和用途。 1. **HashSet** - **构造函数**:HashSet提供了多种构造方法,包括无参构造、接受...

Global site tag (gtag.js) - Google Analytics