`

HashSet重复元素判断

    博客分类:
  • java
 
阅读更多
HashSet不能添加重复的元素,当调用add(Object)方法时候,
首先会调用Object的hashCode方法判hashCode是否已经存在,如不存在则直接插入元素;
如果已存在则调用Object对象的equals方法判断是否返回true, 如果为true则说明元素已经存在,如为false则插入元素。
例如Person类,重写hashCode方法和equals方法,用以判断传入集合的元素是否已经存在。


package com.test;
import java.util.HashSet;


public class HashSetDemo {
public static void main(String[] args) {
  HashSet<Person> set = new HashSet<Person>();
  Person p1 = new Person("张三");
  Person p2 = new Person("张三");
  boolean flag1 = set.add(p1);// 首先调用p1对象的hashCode进行判断,如果不存在相同的hashCode,则调equals方法进行判断。
  boolean flag2 = set.add(p2);// 首先调用p2对象的hashCode进行判断,如果不存在相同的hashCode,则调equals方法进行判断。
  System.out.println("flag1的值为:" + flag1);// flag1的值为:true
  System.out.println("flag2的值为:" + flag2);// flag2的值为:false.因为p1与p2是永远相同的hashCode并且有相同的name。
  System.out.println("set的值为:" + set);
}
}
class Person {
private String name;
Person(String name) {//有参构造器
  this.name = name;
}
@Override
public int hashCode() {// 重写hashCode方法
  return this.name.hashCode();
}
@Override
public boolean equals(Object obj) {// 重写equals方法
  if (this == obj) {
   return true;
  }
  if (null != obj && obj instanceof Person) {
   Person p = (Person) obj;
   if (name.equals(p.name)) {// 判断name是否相同
    return true;
   }
  }
  return false;
}
}

运行结果:
flag1的值为:true
flag2的值为:false------->p2没有插入成功返回false
set的值为:[com.test.Person@bd2e0] ---->set只有一个元素

分享到:
评论

相关推荐

    java 中HashMap、HashSet、TreeMap、TreeSet判断元素相同的几种方法比较

    主要介绍了从源码的角度浅析HashMap、TreeMap元素的存储和获取元素的逻辑;从Map与Set之间的关系浅析常用的Set中元素的存储和判断是否重复的逻辑,需要的朋友可以参考下

    HashSet 是如何保证不重复的

    向 HashSet 中 add ()元素时,判断元素是否存在的依据,不仅要比较hash值,同时还要结合 equles 方法比较。

    java集合知识-map、set等

    Set:元素不可以重复,是无序。p508 Set接口中的方法和Collection一致。 |--HashSet: 内部数据结构是哈希表 ,是不同步的。 如何保证该集合的元素唯一性呢? 是通过对象的hashCode和equals方法来完成对象唯一性的...

    大厂真题之阿里云-Java实习生

    HashSet 是如何保证不重复的 向 HashSet 中 add ()元素时,判断元素是否存在的依据,不仅要比较hash值,同时还要结合 equles 方法比较。 HashSet 中的 add ()方法会使用 HashMap 的 add ()方法。以下是 HashSet 部分...

    Java集合框架Set接口.pdf

    Java集合框架中的Set接口是一种不允许包含重复元素的集合。Set接口继承自Collection接口,因此它具有Collection接口定义的所有方法。同时,Set接口还具有自己的特殊方法,例如:添加元素、删除元素、判断元素是否...

    求2个集合的交集

    再把第二个集合中的元素放进hashSet中,如果有重复元素,就是这2个集合的交集,时间复杂度为O(N)。即总的时间复杂度从O(M*N)降低到了O(M+N)。 代码: public static List&lt;string&gt; GetIntersection2(List&lt;string&gt; ...

    LeetCode判断字符串是否循环-notebook-code:个人学习过程中leetcode、牛客等刷题笔记

    2.利用HashSet的元素不重复性,涉及到:set.contains(nums[i])、set.add(nums[i])方法。同时HashSet和HashMap相比Set是一维,Map是二维。 3.利用Arrays.sort(nums)排序方法,先排序,再判断相邻是否相等。 字符串: 1...

    带环单链表查找环的入口算法(Java语言描述)

    思路一:HashSet第一个重复元素就是环的入口 按照查找单链表带环的思路二,我们用一个HashSet维护已经跑过的元素,当重复的时候,那个结点就是环的入口。这法子还算好使,不过还是老问题——空间复杂度大。 思路二:...

    leetcode亲密字符串-leetcode859:leetcode859

    中至少有2个重复元素。②、A != B (ab与ba,abc与bca): AB中只能有2对不同索引 (元素互换相等)。注意:判断是否有重复时,使用set或数组++。 代码: package com.lihe.leetcode.string; import java.util.HashSet; ...

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

    有序、有索引、元素可重复 1.ArrayList: 底层是数组结构、查询快、增删慢、不同步 添加第一个元素的时候,创建默认个数是10个,如果超出了10个,就创建一个长度为 10+10&gt;&gt;1=15的数组 2.LinkedList: 底层是链表结构、...

    Java面试题.docx

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

    leetcode添加元素使和等于-leetcode_record:leetcode刷题题解,基于java实现

    leetcode添加元素使和等于 leetcode_record 剑指offer 第2版 Title-Link Describe Method Note 03 数组中重复的数字 长度为 n 的数组 nums 里的所有数字都在 0~n-1 的范围内,找出数组中任意一个重复的数字 数组 ...

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

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

    leetcode题库-leetcode530:个人用来刷Leetcode的

    26删除排序数组的重复元素 双指针 :glowing_star: 136只出现一次的数字 位运算 :glowing_star::glowing_star::glowing_star: 344反转字符串 双指针 :glowing_star: 141判断链表有环 双指针,快慢指针 :glowing_star:...

    leetcode中国-LeetCode:力码

    数组元素在[1,n]之间的替换重复缺失问题: 有序矩阵: 5 图 二分图: 拓扑排序: 常用于在具有先序关系的任务规划中。 并查集: 并查集可以动态地连通两个点,并且可以非常快速地判断两个点是否连通。 6 位运算 7 双...

    达内 coreJava 习题答案

    1,编写程序,判断给定的某个年份是否是闰年。 闰年的判断规则如下: (1)若某个年份能被4整除但不能被100整除,则是闰年。 (2)若某个年份能被400整除,则也是闰年。 import java.util.Scanner; class ...

    Java范例开发大全 (源程序)

     实例64 去除重复元素 88  实例65 数组求和计算 90  实例66 求最大值、最小值和平均值 91  5.2 二维数组 92  实例67 二维数组的创建与使用 92  实例68 矩阵转置 93  实例69 奇数阶幻方 94  实例70 求...

Global site tag (gtag.js) - Google Analytics