Java 在arraylist中查找重复的字符串
我需要我的程序检查所有客户电话号码的数组列表,并打印出具有相同号码的客户。我将数字注册为字符串,并尝试了此解决方案,但出现了一个错误…有人能帮我吗? 谢谢Java 在arraylist中查找重复的字符串,java,arraylist,Java,Arraylist,我需要我的程序检查所有客户电话号码的数组列表,并打印出具有相同号码的客户。我将数字注册为字符串,并尝试了此解决方案,但出现了一个错误…有人能帮我吗? 谢谢 boolean duplicates=false; 对于(int j=0;j您的代码应该如下所示: boolean duplicates=false; for (int j=0;j<TelefonNrLista.size();j++) { for (int k=j+1;k<TelefonNrLista.size();k++
boolean duplicates=false;
对于(int j=0;j您的代码应该如下所示:
boolean duplicates=false;
for (int j=0;j<TelefonNrLista.size();j++) {
for (int k=j+1;k<TelefonNrLista.size();k++) {
if (k!=j && TelefonNrLista(k).getTelNr().equals(TelefonNrLista(j).getTelNr()) {
duplicates=true;
}
}
}
public Set<Client>lookForDuplicater(List<Client> TelefonNrLista )
{
Set<Client> duplicates = new Hashset<Client>(); // hash does not allow duplicates by definition
Iterator<Client> iterator = TelefonNrLista.iterator();
while(iterator.hasNext()
{
Client current = iterator.next();
Itarator2 = TelefonNrLista.iterator();
while(iterator2.hasNext())
{
Client candidate = iterator2.next();
// You don't want to compare the same instance
if (current.equals(candidate) == false)
{
// if (current.getTelNr()==candidate.getTelNr()) this for integer
if (current.getTelNr().equals(candidate.getTelNr())) // this works for strings
{
duplicates.add(current);
break;
}
}
}
}
return duplicates ;
}
boolean duplicates=false;
对于(int j=0;j要查找它是否有重复项,可以使用列表的HashSet
构造函数并检查size()
属性
Set noDuplicates = new HashSet(TelefonNrLista);
if (noDuplicates.size() < TelefonNrLista.size()){
// do your stuff
}
Set noDuplicates=新哈希集(TelefonNrLista);
if(noDuplicates.size()
您必须使用类似以下内容的算法:
boolean duplicates=false;
for (int j=0;j<TelefonNrLista.size();j++) {
for (int k=j+1;k<TelefonNrLista.size();k++) {
if (k!=j && TelefonNrLista(k).getTelNr().equals(TelefonNrLista(j).getTelNr()) {
duplicates=true;
}
}
}
public Set<Client>lookForDuplicater(List<Client> TelefonNrLista )
{
Set<Client> duplicates = new Hashset<Client>(); // hash does not allow duplicates by definition
Iterator<Client> iterator = TelefonNrLista.iterator();
while(iterator.hasNext()
{
Client current = iterator.next();
Itarator2 = TelefonNrLista.iterator();
while(iterator2.hasNext())
{
Client candidate = iterator2.next();
// You don't want to compare the same instance
if (current.equals(candidate) == false)
{
// if (current.getTelNr()==candidate.getTelNr()) this for integer
if (current.getTelNr().equals(candidate.getTelNr())) // this works for strings
{
duplicates.add(current);
break;
}
}
}
}
return duplicates ;
}
public setlookforduplicate(列表TelefonNrLista)
{
Set duplicates=new Hashset();//根据定义,哈希不允许重复
迭代器迭代器=TelefonNrLista.Iterator();
while(iterator.hasNext()
{
Client current=iterator.next();
Itarator2=TelefonNrLista.iterator();
while(iterator2.hasNext())
{
Client-candidate=iterator2.next();
//您不想比较同一个实例
if(当前值等于(候选值)=false)
{
//如果(current.getTelNr()==candidate.getTelNr())为整数
if(current.getTelNr().equals(candidate.getTelNr())//这适用于字符串
{
重复项。添加(当前);
打破
}
}
}
}
返回副本;
}
使用返回的集合,您可以轻松检查它是否为空(duplicates.isEmpty()),如果为空,则表示它没有重复项。如果不为空,则重复项位于集合内。为什么使用两个单独的for循环
boolean duplicates=false;
for (int j=0;j<TelefonNrLista.size() - 1;j++){
if (TelefonNrLista(j).getTelNr().equals(TelefonNrLista(j+1).getTelNr()))
duplicates = true;
}
boolean duplicates=false;
对于(int j=0;jStackTrace
请..您的if
语句中没有右括号。k!=j
由于内环结构总是false
。@Physogenesis您的意思是由于内环它总是正确的吗?@nafas是的。愚蠢的错误。好吧,这是我的代码了……如果我只有两个人有相同的代码,它就会工作相同的电话号码,但如果我的电话号码超过2,它就不存在了……我如何才能正确使用它呢?public static void listatenr(){for(int y=0;yy您可以如上所述将第一个循环减少1次迭代,但这实际上不会改变代码。您不能使用这样的集合,您不知道他的自定义类equals方法的实现细节。getTelNr()方法表示他正在使用某个自定义类。我完全同意使用HashSet,但要使用它,必须首先重写hashCode和equals方法这是不够的,因为equals和hashCode方法尚未被重写