美文网首页
HashSet重复元素判断

HashSet重复元素判断

作者: Book_new | 来源:发表于2018-04-18 23:03 被阅读0次

HashSet重复元素判断:

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 set = new HashSet();

  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只有一个元素

总结:set接口是通过equals来判断是否重复的,hashset是一种加快判断效率的一种实现,先通过hashcode判断(hashcode通过运算求出数组下标,通过下标判断是否有对象存在),如果重复,再equal比较。

存储:

http://hxraid.iteye.com/blog/448884

相关文章

  • HashSet重复元素判断

    HashSet重复元素判断: HashSet不能添加重复的元素,当调用add(Object)方法时候, 首先会调用...

  • 第十八天 - 知识点总结

    set里面的元素都是去重复的,但是这种重复的判定是有区别的:HashSet 在HashSet中判断两个元素是否是同...

  • HashSet简介

    HashSet简介 HashSet是Set接口的实现,不允许元素重复 元素不重复是基于HashMap实现 非线程安...

  • HashSet 和 TreeSet 判断集合内元素相等的方法

    HashSet 和 TreeSet 判断集合内元素相等的方法 HashSet public boolean equ...

  • HashSet

    HashSet HashSet实现了Set接口,表示的是无序的不可重复的元素的集合。 构造函数1、HashSet(...

  • List多种去重方法&去重后排序

    通过HashSet踢除重复元素 循环List中的所有元素然后删除重复 List去重后排序

  • Java集合框架之 Set

    一、 SetSet 的最大特点是元素无序以及不能重复。 二、HashSet HashSet 存放的是 Hash 值...

  • java源码分析之HashSet

    我们先提出几个问题: 1.HashSet怎么保证添加元素不重复?2.HashSet是否允许null元素?3.Has...

  • Java自学-集合框架 HashSet

    Java集合框架 HashSet 示例 1 : 元素不能重复 Set中的元素,不能重复 示例 2 : 没有顺序 S...

  • HashSet源码解析

    HashSet是用来存储没有重复元素的集合类,并且它是无序的。HashSet 内部实现是基于 HashMap ,实...

网友评论

      本文标题:HashSet重复元素判断

      本文链接:https://www.haomeiwen.com/subject/zzxikftx.html