Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在arraylist中查找重复的字符串_Java_Arraylist - Fatal编程技术网

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;j
StackTrace
请..您的
if
语句中没有右括号。
k!=j
由于内环结构总是
false
。@Physogenesis您的意思是由于内环它总是正确的吗?@nafas是的。愚蠢的错误。好吧,这是我的代码了……如果我只有两个人有相同的代码,它就会工作相同的电话号码,但如果我的电话号码超过2,它就不存在了……我如何才能正确使用它呢?public static void listatenr(){for(int y=0;yy您可以如上所述将第一个循环减少1次迭代,但这实际上不会改变代码。您不能使用这样的集合,您不知道他的自定义类equals方法的实现细节。getTelNr()方法表示他正在使用某个自定义类。我完全同意使用HashSet,但要使用它,必须首先重写hashCode和equals方法这是不够的,因为equals和hashCode方法尚未被重写