当前位置: 代码迷 >> J2SE >> 遇到一个Set装入重复元素的有关问题
  详细解决方案

遇到一个Set装入重复元素的有关问题

热度:138   发布时间:2016-04-24 01:42:28.0
遇到一个Set装入重复元素的问题
遇到一个蛋疼的问题,明知道是错的,但是不知道该怎么
Java code
public class AddObject {       int hashCode;         public AddObject(int hashCode) {             this.hashCode = hashCode;       }    public int hashCode() {                return hashCode;    }   }  public class TestHashSet {       public static void main(String args[]) {           // set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,           // 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)           // 方法进行比较,如果结果返回为true,则不添加;否则,添加           Set<AddObject> set = new HashSet<AddObject>();           // 设置初始hashCode值           AddObject ao = new AddObject(2);           // 第一次添加           set.add(ao);        AddObject ao2= ao;               // 重新设置hashCode           ao2.hashCode=3;                       System.out.println(ao.equals(ao2));        // 再次添加           set.add(ao2);        Iterator iter = set.iterator();        while(iter.hasNext()){            AddObject aoTest = (AddObject)iter.next();            System.out.println(aoTest.hashCode+"xxx  ");        }        System.out.println(ao.equals(ao2));        System.out.println(set.size());           // 输出结果显然是2。但两次添加的对象显然是同一个对象,所以Set中不能存放重复的元素这一说法是不完善的         }   }  
反驳,代码贴在这里,望大神看一下,特别是写的这个hashCode方法。

------解决方案--------------------
Java code
// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,           // 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)           // 方法进行比较,如果结果返回为true,则不添加;否则,添加
------解决方案--------------------
探讨
引用:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/*
class AddObject {
int hashCode;

public AddObject(int hashCode) {

this.hashCode =………
  相关解决方案