【问题标题】:Check if String is in Arraylist检查字符串是否在 Arraylist 中
【发布时间】:2018-12-16 06:54:23
【问题描述】:

如何检查我的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");
        }
    }
}

【问题讨论】:

  • list.contains(input);
  • 如果输入不存在,是否可以将输入添加到数组列表中?
  • 在插入之前检查List 是否包含String?但是,如果您不想重复,听起来Set 更可取。如果顺序无关紧要,您可以选择HashSet,如果您想使用自然顺序或为您自己指定Comparator,则可以选择TreeSet,或者为维护插入顺序选择LinkedHashSet
  • 请遵守命名约定。像Input 这样的变量名应该总是camelCase。所以请inputPascalCase 仅用于类名。
  • 由于没有研究而被否决。下次请查看documentation。它清楚地解释了equals当且仅当指定的对象也是一个列表,两个列表具有相同的大小,并且两个列表中所有对应的元素对都相等时才返回true”。它还表明有一个contains 方法“如果此列表包含指定元素则返回true”。

标签: java list contains


【解决方案1】:

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

【讨论】:

  • 更准确地说,对于List equals 通常通过在所有元素上调用equals 来实现,比较两者是否包含相同的元素。所以List.equals(Element) 没有多大意义。它旨在用作List.equals(List)
  • @Zabuza 我不知道 :)
【解决方案2】:

说明

你写的

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

InputStringlistArrayList。但是,String#equals (documentation) 方法比较两个Strings 是否具有相同的字符(如"hello".equals("hello")),而不是参数列表是否包含您调用该方法的元素。引用其文档:

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


解决方案

你真正想要使用的是List#containsdocumentation):

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

所以代码可能如下所示:

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

命名约定

请注意命名约定。变量名应始终使用 camelCase,因此应使用 input 而不是 Input。方法名称也一样。

只有类名是用 PascalCase 写的。并且常量(static final)用大写SNAKE_CASE写成。

【讨论】:

    猜你喜欢
    • 2023-04-07
    • 2011-12-15
    • 2016-03-25
    • 2021-11-10
    • 2017-08-29
    • 2021-05-18
    • 2019-12-29
    • 2019-03-03
    • 2015-04-02
    相关资源
    最近更新 更多