由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后,检查”是否相等的实例有相等的散列码”,不是的话,予以 修改
相关推荐
记住:如果元素要存储到HashSet集合中,必须覆盖hashCode方法和equals方法。 一般情况下,如果自定义的类会产生很多对象,比如人,学生,书,通常都需要覆盖equals,hashCode方法。 建立对象判断是否相同的依据。...
Java集合中有两类,一类是List,一类是Set他们之间的区别就在于List集合中的元素师有序的,且可以重复,而Set集合中元素是无序不可重复的。对于List好处理,但是对于Set而言我们要如何来保证元素不重复呢?通过迭代...
4)打印集合的大小,然后删除集合中的第3个元素,并显示删除元素的内容,然后再打印目前集合中第3个元素的内容,并再次打印集合的大小。 3、编写程序练习Map集合的基本使用: 1)创建一个只能容纳String对象的...
set集合是无序的相较于list集合是没有下标的,hashset底层去重,与hashCode、equals方法相关,排序的元素不是String,而是对象Person
集合的家族(1)List集合—(有序,可重复)(2)Set集合—(无序,唯一) 一. 为什么要有集合? 集合是为了弥补数组的不足而存在。 集合相对于数组优势在于:a.集合的长度可以动态改变;b.集合中能够存放多种类型的数据。 ...
注意,如果你定义的Set包含组合元素(composite-element),正确地实现equals()和hashCode()是非常重要的。 组合元素可以包含组件,但是不能包含集合。如果你的组合元素自身包含组件, 你必须使用标签。这是一个相当...
和List一样,Set也可以用来存放多个元素。我们主要来学习Set的三个实现类。 HashSet TreeSet LinkedHashSet 同样,它们之间的相同点有: 都是Set的实现类 存入的元素不能重复 都是无序的(不能通过下标来查询) 他们...
总的来说,Java中的集合(Collection)有两类,一类是List,再有一类是Set。前者集合内的元素是有序的,元素可以重复;后者元素无序,但元素不可重复
java8 集合源码分析 ...保证唯一性:元素hashCode和equals方法。hashCode方法相同,判断equals方法 ---LinkedHashSet: 有序,是HashSet的子类 2.TreeSet: 底层是二叉树,可对元素进行排序,默认是自然顺序
31、HashSet与HashMap怎么判断集合元素重复? 33、ArrayList和LinkedList的区别,以及应用场景 34、数组和链表的区别 35、开启线程的三种方式? 36、线程和进程的区别? 38、run()和start()方法区别 39、如何...
set, list, queue这些接口间的区别,set不可重复, arraylist的实现和linkedlist的实现区别,HashMap, HashTable。涉及到各种效率问题等,里面最好阅读一下源码 集合的遍历方法和使用iterator来遍历的区别,集合...
第3章 面向过程(数组和方法) 4课时 理解如何声明数组、构造数组、初始化数组以及使用数组中的各个元素。 清楚数组作为对象处理,创建数组对象时指定数组大小。 能够声明和操作多维数组...
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. ...
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. ...
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. ...
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...
怎么判断集合元素重复? String、StringBuffer、StringBuilder 之间的区别? 对反射的了解? 对注解的了解? 对依赖注入的了解? 对泛型的了解? 泛型中 extends 和 super 的区别? 对 Java 的异常体系的了解? 对...
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. ...
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. ...