【问题标题】:How do i find duplicates across a list如何在列表中查找重复项
【发布时间】:2016-09-11 21:13:19
【问题描述】:

我试图获取用户 ID 并根据列表检查它是否已经存在。如果存在,则打印“ID 已存在”,如果不存在,则输入用户名并将其存储在列表中。

private LinkedList<Person> people = new LinkedList<Person>();

    private void addPerson(){
           int personId = readPersonId();
           Person person = person(personId);
           if (person.hasId){
           System.out.println("ID already exists"); 
           }
          else{
           String s = readName();
           people.add(new Person(personId, s, 2));
          }
        }

但是我的程序由于某种原因在第一个循环中停止了。

【问题讨论】:

  • 您没有显示任何循环...您的程序“停止”是什么意思?它会挂起还是给出异常?
  • 还有什么是person.hasId
  • 考虑使用 Set 而不是 List。它不允许包含重复项。
  • 您是否尝试过使用调试器? ericlippert.com/2014/03/05/how-to-debug-small-programs
  • private Person person(int id){ for (Person person : people){ if (person.hasId(id)){ return person; } } return null; } 这是返回具有 id 的人的方法,否则返回 null。 has.id 是一个布尔值,包含选定的 i.d 是否在列表中。我应该在 OP 中添加这个,但它让我忘记了。到目前为止,我尝试过的任何事情都没有奏效。

标签: java arrays list


【解决方案1】:

您可以将您的 arraylist 转储到一个集合中,然后比较这 2 个。如果集合的大小小于 arraylist 大小,则存在重复。

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

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

【讨论】:

  • 无助于确定给定的 id 是否重复。
【解决方案2】:

浏览您已经拥有的人员列表并寻找具有相同 ID 的人员。如果没有匹配的人,请先将新人添加到列表中。

private LinkedList<Person> people = new LinkedList<Person>();

private void addPerson(){
    int personId = readPersonId();
    boolean found = false;

    for (Person curr : people) {
        if (curr.getId() == personId){
            System.out.println("ID already exists"); 
            found = true;
            break;
        }
    }

    if (!found) {
        Person person = person(personId);
        String s = readName();
        people.add(person);
    }
}

【讨论】:

  • 没有解释的代码对任何人都没有帮助!请添加解释以改善此答案
猜你喜欢
  • 2014-09-03
  • 2013-03-29
  • 2013-02-21
  • 2013-11-17
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多