首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hashset对象

Hashset对象
EN

Stack Overflow用户
提问于 2013-12-06 18:57:02
回答 3查看 130关注 0票数 0

我正在编写一段代码,它需要大量的对象并将它们添加到另一个数组中。关键是我不想要任何副本。有什么方法可以实现Hashset来解决这个问题吗?

代码语言:javascript
复制
    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()
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-12-06 19:06:50

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

代码语言:javascript
复制
Set<YourObject> set = new HashSet<YourObject>(yourCollection);

代码语言:javascript
复制
Set<YourObject> set = new HashSet<YourObject>();
set.add(...);

然后

代码语言:javascript
复制
YourObject[] array = set.toArray(new YourObject[0])
票数 2
EN

Stack Overflow用户

发布于 2013-12-06 19:18:44

我认为你应该注意:

1-如果原始藏书中有副本,该怎么办?是否使用添加到数组中的第一个?用其他的?

2-您肯定需要实现等于和hashcode,这样您就可以知道什么是重复的对象。

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

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

票数 1
EN

Stack Overflow用户

发布于 2013-12-06 19:06:07

这取决于你指的是什么复制。如果您指的是一个相同的对象,那么您可以使用一个列表,在将其添加到列表之前,只需查看该列表是否包含该对象。

代码语言:javascript
复制
Object obj = new Object();
List<Object> list = new ArrayList<Object>();

if (!list.contains(obj)) {
    list.add(obj);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20431521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档