首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java:在ArrayList中检测重复项?

Java:在ArrayList中检测重复项?
EN

Stack Overflow用户
提问于 2009-02-18 21:22:31
回答 16查看 291K关注 0票数 114

如何检测(返回true/false)一个ArrayList是否包含多个相同的元素?

太谢谢你了,特里

编辑忘记提到,我并不是要比较“块”之间的关系,而是要比较它们的整数值。每个“块”都有一个int,这就是它们的不同之处。我通过调用一个名为"getNum“的方法(例如table1.getNum();

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2009-02-18 21:25:33

最简单的做法是:将整个集合转储到一个集合中(使用Set (集合)构造函数或Set.addAll),然后查看该集合是否与ArrayList的大小相同。

List<Integer> list = ...;
Set<Integer> set = new HashSet<Integer>(list);

if(set.size() < list.size()){
    /* There are duplicates */
}

更新:如果我没理解错的话,您有一个二维Block数组,如下所示

块表;

您想要检测它们中是否有任何行有重复项?

在这种情况下,假设Block正确地实现了"equals“和"hashCode”,我可以执行以下操作:

for (Block[] row : table) {
   Set set = new HashSet<Block>(); 
   for (Block cell : row) {
      set.add(cell);
   }
   if (set.size() < 6) { //has duplicate
   }
}

对于语法,我不是100%确定,所以写成这样可能更安全

for (int i = 0; i < 6; i++) {
   Set set = new HashSet<Block>(); 
   for (int j = 0; j < 6; j++)
    set.add(table[i][j]);
 ...

如果要添加的项已经存在于集合中,则Set.add将返回布尔值false,因此,如果您只想知道是否存在重复项,则甚至可以对任何返回false的add进行短路和打包。

票数 214
EN

Stack Overflow用户

发布于 2009-03-01 19:13:17

改进代码,使用Set#add返回值代替比较list和set的大小

public static <T> boolean hasDuplicate(Iterable<T> all) {
    Set<T> set = new HashSet<T>();
    // Set#add returns false if the set does not change, which
    // indicates that a duplicate element has been added.
    for (T each: all) if (!set.add(each)) return true;
    return false;
}
票数 64
EN

Stack Overflow用户

发布于 2009-02-18 21:30:14

如果您希望完全避免重复,那么您应该直接跳过检测重复的中间过程,而使用Set

票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/562894

复制
相关文章

相似问题

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