HashSet判断元素相等的标准



HashSet判断元素相等的标准:hashCode()相同,equals()方法相同:

1.新建一个类

package com;

public class R {
 private int count;

 public R() {

 }

 public R(int count) {
  this.count = count;
 }

 public int getCount() {
  return count;
 }

 public void setCount(int count) {
  this.count = count;
 }

 public int hashCode() {
  return this.count;
 }

 public boolean equals(Object object) {
  if (object == this) {
   return true;
  }

  if (object != null && object.getClass() == R.class) {
   return ((R) object).getCount() == this.count;
  }
  return false;
 }

 public String toString() {
  return String.valueOf(this.count);
 }
}


2.判断代码:

package com;

import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
/**
 * 通过下面的验证,证明:请勿轻易更改集合元素中用来参与hashCode,equals计算的实例变量
 * 否则会导致set集合无法准确的操作这些集合元素
 * @author Administrator
 */

public class CollectionOper {
 public static void main(String[] args) {
  Collection list = new HashSet<>();
  list.add(new R(1));
  list.add(new R(2));
  list.add(new R(3));
  list.add(new R(4));
  list.add(new R(5));

  System.out.println("list集合的元素:" + list);
  
  Iterator iterator = list.iterator() ;
  R firstR = iterator.next() ;
  System.out.println("第一个元素的值firstR = " + firstR);
  
  //设置一个有重复值的元素
  firstR.setCount(2);
  System.out.println("第一个元素的值firstR = " + firstR);
  System.out.println("list集合的元素:" + list);
  
  //删除含有重复值的元素
  list.remove(new R(2)) ;
  System.out.println("list集合的元素:" + list);
  System.out.println(list.contains(new R(2)));
 }
}

你可能感兴趣的:(Java)