如何检测(返回真/假)ArrayList 是否包含多个 Java 中的相同元素?
非常感谢, 特里
编辑 忘了提一下,我不是要比较“ block ”,而是比较它们的整数值。每个“ block ”都有一个 int,这就是它们不同的原因。 我通过调用名为“getNum”的方法(例如 table1[0][2].getNum();
最佳答案
最简单的:将整个集合转储到一个 Set 中(使用 Set(Collection) 构造函数或 Set.addAll),然后查看 Set 是否与 ArrayList 大小相同。
List<Integer> list = ...;
Set<Integer> set = new HashSet<Integer>(list);
if(set.size() < list.size()){
/* There are duplicates */
}
更新:如果我正确理解你的问题,你有一个二维数组 block ,如
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
如果要添加的项目已经在集合中,则返回 boolean 值 false,因此您甚至可以短路并退出任何返回 false
的添加如果您只想知道是否有任何重复。
关于Java:检测 ArrayList 中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/562894/