哈希集对象

时间:2013-12-06 18:57:02

标签: java object set hashset

我正在编写一段代码,它需要大量的对象并将它们添加到另一个数组中。问题是,我不想要任何重复。有没有办法实现Hashset来解决这个问题?

    public static Statistic[] combineStatistics(Statistic[] rptData, Statistic[] dbsData) {
    HashSet<Statistic> set = new HashSet<Statistic>();
    for (int i=0; i<rptData.length; i++) {
        set.add(rptData[i]);
    }
    /*If there's no data in the database, we don't have anything to add to the new array*/
    if (dbsData!=null) {
        for (int j=0; j<dbsData.length;j++) {
            set.add(dbsData[j]);
        }
    }
    Statistic[] total=set.toArray(new Statistic[0]);
    for (int workDummy=0; workDummy<total.length; workDummy++) {
        System.out.println(total[workDummy].serialName);
    }

    return total;
}//end combineStatistics()

3 个答案:

答案 0 :(得分:2)

如果您期望值相等而不是引用相等,请在equals(Object obj)上正确实现hashCode()YourObject

Set<YourObject> set = new HashSet<YourObject>(yourCollection);

Set<YourObject> set = new HashSet<YourObject>();
set.add(...);

然后

YourObject[] array = set.toArray(new YourObject[0])

答案 1 :(得分:1)

我认为你应该注意:

1 - 如果原始Collection中有副本怎么办?使用第一个添加到数组?使用其他?

2 - 你肯定需要实现equals和hashcode,这样你才能知道什么是重复的对象

3 - 你打算创建一个固定大小的数组然后不再添加对象吗?或者你要继续添加东西?

您可以实际使用任何类型的Set,但是如果您使用LinkedHashSet,那么您将具有已定义的迭代顺序(看起来像一个数组)。 HashSet不会保证任何订单,TreeSet会尝试命令数据升序。

答案 2 :(得分:0)

取决于您所指的重复内容。如果你的意思是一个相同的对象,那么你可以使用一个List,并在将它添加到列表之前查看List是否包含该对象。

Object obj = new Object();
List<Object> list = new ArrayList<Object>();

if (!list.contains(obj)) {
    list.add(obj);
}