检查ArrayList中是否存在值


179

如何检查扫描仪中写入的值是否存在ArrayList

List<CurrentAccount> lista = new ArrayList<CurrentAccount>();

CurrentAccount conta1 = new CurrentAccount("Alberto Carlos", 1052);
CurrentAccount conta2 = new CurrentAccount("Pedro Fonseca", 30);
CurrentAccount conta3 = new CurrentAccount("Ricardo Vitor", 1534);
CurrentAccount conta4 = new CurrentAccount("João Lopes", 3135);

lista.add(conta1);
lista.add(conta2);
lista.add(conta3);
lista.add(conta4);

Collections.sort(lista);

System.out.printf("Bank Accounts:" + "%n");
Iterator<CurrentAccount> itr = lista.iterator();
while (itr.hasNext()) {
    CurrentAccount element = itr.next();
    System.out.printf(element + " " + "%n");
}
System.out.println();

Answers:


320

只需使用ArrayList.contains(desiredElement)即可。例如,如果您要从示例中寻找conta1帐户,则可以使用以下方法:

if (lista.contains(conta1)) {
    System.out.println("Account found");
} else {
    System.out.println("Account not found");
}

编辑: 请注意,为了使其正常工作,您将需要适当地重写equals()hashCode()方法。如果使用的是Eclipse IDE,则可以通过首先打开CurrentAccount对象的源文件并选择来生成这些方法。Source > Generate hashCode() and equals()...


9
equals()方法应在CurrentAccount中覆盖,以确定它们何时是同一对象
Javi 2010年

3
在那种情况下,hashcode()也需要被覆盖。对于每个hashcode()合约,相等的对象必须具有相等的哈希码。
zockman 2010年

@zockman确信您是对的,尽管我认为在这种情况下重载等于更为重要,因为即使不是CurrentAccount对象,即使它们的所有属性都具有相同的值,它也可能会不相同。但是我也同意重写hashcode()。
哈维2010年

是否有一个比较对象引用的版本?
托马什Zato -恢复莫妮卡

嗨,是否可以检查列表中是否包含“ Alberto Carlos”?
杰西

47

在检查值是否存在时,最好使用a而HashSet不是ArrayLista。Java文档HashSet说:"This class offers constant time performance for the basic operations (add, remove, contains and size)"

ArrayList.contains() 可能必须遍历整个列表才能找到您要查找的实例。


16

请参阅我对此帖子的回答。

无需遍历List刚刚覆盖的equals方法。

使用equals代替==

@Override
public boolean equals (Object object) {
    boolean result = false;
    if (object == null || object.getClass() != getClass()) {
        result = false;
    } else {
        EmployeeModel employee = (EmployeeModel) object;
        if (this.name.equals(employee.getName()) && this.designation.equals(employee.getDesignation())   && this.age == employee.getAge()) {
            result = true;
        }
    }
    return result;
}

这样称呼它:

public static void main(String args[]) {

    EmployeeModel first = new EmployeeModel("Sameer", "Developer", 25);
    EmployeeModel second = new EmployeeModel("Jon", "Manager", 30);
    EmployeeModel third = new EmployeeModel("Priyanka", "Tester", 24);

    List<EmployeeModel> employeeList = new ArrayList<EmployeeModel>();
    employeeList.add(first);
    employeeList.add(second);
    employeeList.add(third);

    EmployeeModel checkUserOne = new EmployeeModel("Sameer", "Developer", 25);
    System.out.println("Check checkUserOne is in list or not");
    System.out.println("Is checkUserOne Preasent = ? " + employeeList.contains(checkUserOne));

    EmployeeModel checkUserTwo = new EmployeeModel("Tim", "Tester", 24);
    System.out.println("Check checkUserTwo is in list or not");
    System.out.println("Is checkUserTwo Preasent = ? " + employeeList.contains(checkUserTwo));

}

4
您正在使用==比较字符串
Mightian

2
您应该使用equals()而不是==来比较字符串this.name.equals(employee.getName())
幸运的2016年

1
挽救了我的生命bro.could可以给您买一两杯啤酒:)
肯尼迪·坎博18'Oct

10

contains如果提供了的实现,我们可以使用方法检查项目是否存在equalshashCode否则将使用对象引用进行相等性比较。此外,在列表中的情况containsO(n)操作,其中,因为它是O(1)HashSet这样更好地以后使用。在Java 8中,我们还可以使用流根据项目的相等性或特定属性检查项目。

Java 8

CurrentAccount conta5 = new CurrentAccount("João Lopes", 3135);
boolean itemExists = lista.stream().anyMatch(c -> c.equals(conta5)); //provided equals and hashcode overridden
System.out.println(itemExists); // true

String nameToMatch = "Ricardo Vitor";
boolean itemExistsBasedOnProp = lista.stream().map(CurrentAccount::getName).anyMatch(nameToMatch::equals);
System.out.println(itemExistsBasedOnProp); //true

谢谢您提供的惊人答案,实际上是+1!我使用了这部分代码:boolean itemExistsBasedOnProp = selectedR.stream().map(Request::getDesc).anyMatch(cn::equals);现在,我需要它来提取该项目!可能吗 ??
maryem neyli


调用要求API级别24(当前最小值为19):java.util.Collection#stream
shirin


1
public static void linktest()
{
    System.setProperty("webdriver.chrome.driver","C://Users//WDSI//Downloads/chromedriver.exe");
    driver=new ChromeDriver();
    driver.manage().window().maximize();
    driver.get("http://toolsqa.wpengine.com/");
    //List<WebElement> allLinkElements=(List<WebElement>) driver.findElement(By.xpath("//a"));
    //int linkcount=allLinkElements.size();
    //System.out.println(linkcount);
    List<WebElement> link = driver.findElements(By.tagName("a"));
    String data="HOME";
    int linkcount=link.size();
    System.out.println(linkcount);
    for(int i=0;i<link.size();i++) { 
        if(link.get(i).getText().contains(data)) {
            System.out.println("true");         
        }
    } 
}

1

只需使用.contains。例如,如果要检查ArrayList是否arr包含value val,则只需运行arr.contains(val),它将返回一个布尔值,表示是否包含该值。欲了解更多信息,请参阅文档.contains

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.