由TreeSet引出的Set元素判重方法
TreeSet:set中的数据元素必须实现Comparable,必须重写compareTo()方法(而不是equals())。
HashSet:比较set中元素的hashCode方式判断是否是重复的元素,故必须重写hashCode。与HashMap相同,重hashCode()时注意,当元素的一些属性发生变化时,不能改变hashCode 的值,防止一个元素数据在修改了某些属性时,hashCode改变,从而在HashSet和HashMap中能放置多次,或是无法获取。
Java.util.concurrent.CopyOnWriteArraySet:线程安全,用元素的equals()方法判断重复。
Java.util.List:contains()方法调用的是元素数据的equals()方法。
看到网上一个hashcode的实现非常不错,特在此作为记录。
n 如何写hashCode
n 1. 把某个非零常数值,比如17保存在一个叫result的int型变量中;
n 2. 对于对象中的每一个关键域f,完成下列步骤:
n a. 为该域计算int类型的散列码c:
i. f为boolean,计算(f ? 0 : 1);
ii. f为byte、char、short,int,计算(int)f;
iii. f为long,计算(int)(f ^ (f>>>32));
iv. f为float,计算Float.floatToIntBits(f);
v. f为double,计算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编程语言中,`Set`接口作为集合框架的重要组成部分,在实现无重复元素的数据结构方面扮演着关键角色。为了确保元素的唯一性,`Set`接口依赖于对象的`hashCode`和`equals`方法。本文将深入探讨这两个方法在`Set...
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。 一般情况下,如果自定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。 建立对象判断是否相同的依据。...
如果Set集合中的元素不是String,而是自定义的`Person`对象,那么我们需要让`Person`类实现Comparable接口或者提供一个Comparator来控制排序规则。在`Person`类中实现`compareTo(Person other)`方法,可以根据`...
LinkedHashSet是Set集合中的一种有序且唯一的实现类,特点是能够按照元素的添加顺序来存储元素。它的存储原理是通过链表来实现的,具有很高的存储效率和查询效率。 在使用LinkedHashSet时,需要掌握的是如何存储...
迭代器(Iterator)接口用于遍历集合中的元素,它是集合框架的一部分,提供了一种方式来访问集合元素,而不暴露底层的数据结构。 - `hasNext()`:判断集合中是否有下一个元素。 - `next()`:返回集合中的下一个元素。...
在Java集合框架中,许多数据结构如`HashSet`、`HashMap`等依赖于`hashCode`方法来实现高效的数据存储与检索。这些集合通过对象的`hashCode`值将其分配到特定的桶(bucket)中,从而实现快速查找。例如,在`HashSet`中...
- `contains(Object o)`:检查集合中是否包含指定的元素。 - `isEmpty()`:检查集合是否为空。 - `size()`:返回集合中的元素数量。 - `clear()`:清空集合中的所有元素。 ##### 1.2.2 迭代器 迭代器(Iterator)...
- **equals()**和`hashCode()`:比较两个集合是否相等,以及计算哈希值。 通过这个离散数学作业,你可以深入理解`HashSet`的特性和操作,同时锻炼了使用集合框架解决问题的能力。实践这些基本操作有助于提高编程...
Java集合中有两类,一类是List,一类是Set他们之间的区别就在于List集合中的元素师有序的,且可以重复,而Set集合中元素是无序不可重复的。对于List好处理,但是对于Set而言我们要如何来保证元素不重复呢?通过迭代...
理解并熟练运用Java集合体系中的List、Set、Map接口及其实现类,对于日常开发和面试来说至关重要,因为它们是许多Java框架和库的基础。在实际项目中,根据需求选择合适的集合类型可以提高代码的效率和可维护性。在...
HashSet 存储元素不重复的原理是:首先调用 hashcode 方法,判断数组中是否有 Hash 代码相同的,如果没有,就添加。如果有,就再调用 equals 方法,和 Hash 代码相同的元素比较,元素是否相同。 在选择集合类时,...
在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见实现类。 1. **Set接口**:Set接口代表了一个不允许有重复元素的集合。实验中提到了两个主要的实现类:HashSet和TreeSet。...
本篇文章将深入探讨集合框架中的三大核心组件:`List`、`Set`以及`Map`,并通过具体的接口和类来分析它们的特点和应用场景。 #### 集合接口 在Java集合框架中,主要有以下几种关键接口: - **`Collection`接口**:...
在Java编程中,Set接口是集合框架的一部分,它继承自Collection接口,主要用于存储不包含重复元素的集合。Set接口的实现类主要有HashSet、TreeSet和LinkedHashSet,它们各自有不同的特性和使用场景。 1. **HashSet*...
Java中的Set接口是基于集合概念实现的,它不包含重复元素。Set接口继承自Collection接口,并且不保证集合中元素的顺序,某些Set实现可能会按照插入顺序或特定规则排序。以下是对Java Set实现的一些深入讨论: 1. **...
在深入探讨Java中Set接口...通过以上分析,我们可以看到,虽然Set接口本身很简单,但是它的实现却涉及到了哈希表、链表、红黑树以及线程安全等多种数据结构和算法概念,这些是Java开发者深入了解和掌握集合框架的基础。
在Java编程语言中,HashSet是一种常用的集合类,它实现了Set接口,不包含重复元素,并且不保证元素的顺序。在给定的“CustomSet.zip”压缩包中,我们看到一个名为“CustomSet.java”的文件,这很可能是用户自定义的...
Set是Java集合框架的一部分,主要用于存储不重复的元素。它有多种实现类,如HashSet和TreeSet,每个类都有其特定的特性和用途。 1. **HashSet** - **构造函数**:HashSet提供了多种构造方法,包括无参构造、接受...