检查字符串是否在Arraylist中

时间:2018-07-08 10:41:29

标签: java list contains

如何检查我的Input String是否在我的ArrayList中?

我是这样做的。但它始终显示"not equal"。我以1为例:

public class Main {
    public static void main(String[] args) {
        String Input = JOptionPane.showInputDialog("Input:");

        ArrayList<String> list = new ArrayList<>();

        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");

        if (Input.equals(list)) {
            JOptionPane.showMessageDialog(null, "equals");
        } else {
            JOptionPane.showMessageDialog(null, "not equal");
        }
    }
}

2 个答案:

答案 0 :(得分:0)

如果要检查List<T>是否包含T item,则应在代码中使用yourList.contains(T item),这是完全不同的item.equals(object)。简而言之,equals()所做的是检查两个对象是否都存储在相同的内存地址中。尽管对于某些默认类,此方法被覆盖并且以不同的方式起作用,但是String类是一个很好的例子。

答案 1 :(得分:0)

说明

您写了

if (Input.equals(list)) { ... }

,其中InputString,而listArrayList。但是,String#equalsdocumentation)方法比较两个String是否具有相同字符(例如"hello".equals("hello")),而不是比较参数列表是否包含您称为方法的元素上。引用其文档:

  

将此字符串与指定对象进行比较。当且仅当参数为而不是true 且结果为null对象,表示相同的字符序列String >作为此对象。


解决方案

您实际要使用的是List#containsdocumentation):

  

如果此列表包含指定的元素,则返回true。更正式地说,当且仅当此列表包含至少一个元素true使得e时,返回Objects.equals(o, e)

所以代码可能像这样:

if (list.contains(Input)) { ... }

命名约定

请注意命名约定。变量名称应始终位于 camelCase 中,因此用input代替Input。方法名称相同。

仅在 PascalCase 中编写类名。常量(static final)用大写 SNAKE_CASE 编写。