Java 如何在数组的数组中查找重复元素?
可能重复:Java 如何在数组的数组中查找重复元素?,java,arrays,loops,Java,Arrays,Loops,可能重复: 我有这个数组 int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; 如果这个数组中有重复的元素,我需要返回false。 例如,索引[0][1]和[1][2]相等。我需要一种方法来检测这个。另外,如果解决方案只使用原语、数组和循环也很好。1:将所有值添加到列表(例如ArrayList) 2:将所有内容添加到集合(例如TreeSet) 比较list.size()和set.size() 如果
我有这个数组
int[][] array = {{1,2,3,4}, {5,6,2,8}, {9, 10, 11, 12}, {13, 14, 15, 16}};
如果这个数组中有重复的元素,我需要返回false。
例如,索引[0][1]和[1][2]相等。我需要一种方法来检测这个。另外,如果解决方案只使用原语、数组和循环也很好。1:将所有值添加到列表(例如ArrayList)
2:将所有内容添加到集合(例如TreeSet)
比较
list.size()
和set.size()
如果不相等,那么就有两个副本我认为这是一个家庭作业问题,因此没有实际的实施指南
哈希集
集合
是否包含该元素。如果是,则立即返回false返回true代码>
这里有另一种方法,只有知道最大元素时才有效
如果数组单元格为零,则递增单元格(单元格[元素]++
)
如果
数组单元格为1,返回false代码>
返回true代码>
如果您只想使用原语,可以像这样使用TIntHashSet
TIntHashSet set = new TintHashSet(); // like Set<Integer> but with primitives
for(int[] arr: array) for(int i: arr) if(!set.add(i)) return false;
return true;
TIntHashSet=new TIntHashSet();//与集合相似,但具有基本体
for(int[]arr:array)for(int i:arr)if(!set.add(i))返回false;
返回true;
如果无法添加该值,则set.add方法返回false,因为它是重复的。我的解决方案:
package com.rais.duplicates;
import java.util.HashSet;
import java.util.Set;
/**
* @author Rais.Alam
* @date Dec 14, 2012
*/
public class DetectDuplicateClient
{
public static boolean isDuplicate(int[][] array)
{
boolean retVal = false;
if (array != null && array.length > 0)
{
Set<Integer> temp = new HashSet<Integer>();
outer:
for (int[] innerArray : array)
{
for (int value : innerArray)
{
if(!temp.add(value))
{
retVal = true;
break outer;
}
}
}
}
return retVal;
}
public static void main(String[] args)
{
int[][] array = { { 1, 2, 3, 4 }, { 5, 6, 2, 8 }, { 9, 10, 11, 12 },{ 13, 14, 15, 16 } };
System.out.println(isDuplicate(array));
}
}
package com.rais.duplicates;
导入java.util.HashSet;
导入java.util.Set;
/**
*@author Rais.Alam
*@日期2012年12月14日
*/
公共类DetectDuplicateClient
{
公共静态布尔isDuplicate(int[][]数组)
{
布尔retVal=false;
if(array!=null&&array.length>0)
{
Set temp=new HashSet();
外部:
for(int[]innerArray:array)
{
for(int值:innerArray)
{
如果(!温度添加(值))
{
retVal=true;
打破外部;
}
}
}
}
返回返回;
}
公共静态void main(字符串[]args)
{
int[][]数组={{1,2,3,4},{5,6,2,8},{9,10,11,12},{13,14,15,16};
System.out.println(isDuplicate(array));
}
}
所以你有64*64次迭代??注意到了吗?@Natix更像是通往hell@Natix还有汤姆斯,伙计们不会取笑他,帮助他,而不是阻止他解决问题。比我快了几秒钟。作为注释,为了避免添加所有内容,您可以执行一个循环,将列表中的元素添加到集合中,并在集合中返回true
(意思是“有重复项”),如果theSet.add()
返回false。@AlexWien,这是解决问题的好方法。但是看看他的代码,你真的认为他能做到这一点吗?为什么你甚至需要步骤1,这个解决方案没有利用早期的优势exiting@Gambset.add()方法将是我投票赞成的答案。它返回false的第一个实例可能是停止条件。根本不需要列表。我只需将它们添加到集合中,然后跳过列表即可这是行不通的。您需要选择第一个索引并将其与其他索引进行比较。然后选择第二个,然后再将它与其他的进行比较,依此类推。。。这对2个循环根本不起作用。@user1253722我更新了答案这对你有帮助还是不让我知道?是原始的吗?我有正确的链接吗?很好,但是使用外部库的解决方案不是可行的,除了一百万个条目。TInHashSet不是原语,它包装的int[]也不是,但它避免像HashSet那样创建整数或条目对象。我同意应该首先考虑普通的哈希集。谢谢你的解决方案。我对它做了一点修改,以避免使用外部库。我改变了:TIntHashSet=new TIntHashSet()代码>收件人:Set=newhashset()代码>