【问题标题】:Finding duplicates in an ArrayList(JFrame)在 ArrayList(JFrame) 中查找重复项
【发布时间】:2020-08-19 13:42:48
【问题描述】:

我正在尝试做一个摆动应用程序,它将名称添加到 ArrayList,然后将其显示在 Jcombobox 中。我已经完成了窗口和所有操作,但我似乎无法摆脱检测重复名称的问题。

我试过了

    btnnext.addActionListener(new ActionListener() { 
    Override
    public void actionPerformed(ActionEvent e) {

    if(checkDuplicate(names)==true)
    {
    names.add(txtname.getText());
    txtname.setText("");
    }
    else {

    JOptionPane.showMessageDialog(null,"DUPLICATE! do not add");
    }
    }
    });



    public static boolean checkDuplicate(ArrayList<String> list) {
    HashSet set = new HashSet();
    for (int i = 0; i < list.size(); i++) {
    boolean val = set.add(list.get(i));
    if (val == false) {
    return val;
    }
    }
    return true;
    }

它只是说当我已经将它添加到 ArrayList 并且当我收到消息时我无法添加任何其他内容时我有重复。

输入示例:

测试

测试


然后它停止接受新的字符串,只显示消息 DUPLICATE!不要添加

【问题讨论】:

  • 发生这种情况是因为您每次调用checkDuplicate 时基本上都是在创建ArrayListSet 视图,而不是将您尝试添加的项目与现有列表进行比较。换句话说,您的checkDuplicate 是这样编写的,它仅在列表中已经存在重复项时才返回true。您需要将新项目与列表进行比较。使用调试器或手动记下变量的值仔细检查您的逻辑,您会发现问题。
  • 正如你所说的 checkDuplicate 方法让我无处可去。我使用了 contains 方法,并且工作起来非常有魅力。

标签: java swing arraylist


【解决方案1】:

正如我在评论中所说:

发生这种情况是因为您基本上每次调用checkDuplicate 时都会创建ArrayListSet 视图,而不是将您尝试添加的项目与现有列表进行比较。换句话说,您的 checkDuplicate 是这样编写的,它仅在列表中已经存在重复项时才返回 true。您需要将新项目与列表进行比较。使用调试器或手动记下变量的值仔细检查您的逻辑,您就会发现问题所在。

你可以简单地改变这一行:

if(checkDuplicate(names)==true)

对此:

if(!names.contains(txtname.getText()))

你真的不需要checkDuplicate,因为它可以说是“重新发明轮子”。 ArrayList 已经提供了一个 contains 方法,您可以利用它来发挥自己的优势。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2021-12-24
    • 2017-03-16
    • 1970-01-01
    相关资源
    最近更新 更多