简体   繁体   English

检查 ArrayList 中是否存在值

[英]Check if a value exists in ArrayList

How can I check if a value exists in an ArrayList ?如何检查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();

Just use ArrayList.contains(desiredElement) .只需使用ArrayList.contains(desiredElement) For example, if you're looking for the conta1 account from your example, you could use something like:例如,如果您要从示例中查找 conta1 帐户,则可以使用以下内容:

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

Edit: Note that in order for this to work, you will need to properly override the equals() and hashCode() methods.编辑:请注意,为了使其正常工作,您需要正确覆盖equals()hashCode()方法。 If you are using Eclipse IDE, then you can have these methods generated by first opening the source file for your CurrentAccount object and the selecting Source > Generate hashCode() and equals()...如果您使用的是 Eclipse IDE,那么您可以通过首先打开CurrentAccount对象的源文件并选择Source > Generate hashCode() and equals()...来生成这些方法。

Better to use a HashSet than an ArrayList when you are checking for existence of a value.在检查值是否存在时,使用HashSet比使用ArrayList更好。

Java docs for HashSet says HashSet的 Java 文档说

This class offers constant time performance for the basic operations (add, remove, contains and size)此类为基本操作(添加、删除、包含和大小)提供恒定的时间性能

ArrayList.contains() might have to iterate the whole list to find the instance you are looking for. ArrayList.contains()可能必须遍历整个列表才能找到您要查找的实例。

We can use contains method to check if an item exists if we have provided the implementation of equals and hashCode else object reference will be used for equality comparison.如果我们提供了equalshashCode的实现,我们可以使用contains方法检查项目是否存在,否则将使用对象引用进行相等比较。 Also in case of a list contains is O(n) operation where as it is O(1) for HashSet so better to use later.同样,如果列表containsO(n)操作,而HashSetO(1) ,所以以后使用更好。 In Java 8 we can use streams also to check item based on its equality or based on a specific property.在 Java 8 中,我们还可以使用流来根据项目的相等性或特定属性来检查项目。

Java 8爪哇 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

Please refer to my answer on this post .请参考我在这篇文章中的回答。

There is no need to iterate over the List ;无需遍历List just override the equals method and use .contains .只需覆盖equals方法并使用.contains

@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;
}

Call it like this:像这样称呼它:

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));

}

Just use .contains .只需使用.contains For example, if you were checking if an ArrayList arr contains a value val , you would simply run arr.contains(val) , which would return a boolean representing if the value is contained.例如,如果您正在检查 ArrayList arr包含值val ,您只需运行arr.contains(val) ,它将返回一个布尔值,表示是否包含该值。 For more information, see the docs for .contains .有关更多信息,请参阅.contains文档

When Array List contains object of Primitive DataType.当数组列表包含原始数据类型的对象时。

Use this function:
arrayList.contains(value);

if list contains that value then it will return true else false.

When Array List contains object of UserDefined DataType.当数组列表包含 UserDefined DataType 的对象时。

Follow this below Link 

How to compare Objects attributes in an ArrayList? 如何比较 ArrayList 中的对象属性?

I hope this solution will help you.我希望这个解决方案能帮助你。 Thanks谢谢

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");         
        }
    } 
}

Below code can helps下面的代码可以帮助

List<CurrentAccount> lista = new ArrayList<CurrentAccount>();
CurrentAccount conta5 = new CurrentAccount("Pedro Fonseca", 500);
boolean isAdded = lista.contains(model);

ArrayList already have same name so it returns true ArrayList 已经具有相同的名称,因此它返回true

import com.google.gson.annotations.SerializedName;    
import java.util.Objects;

public class CurrentAccount {

    @SerializedName("Name")
    private String name;
    
    @SerializedName("Balance")
    private int balance;


    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getBalance() {
        return balance;
    }

    public void setBalance(int balance) {
        this.balance = balance;
    }

    public CurrentAccount(String name, int balance) {
        this.name = name;
        this.balance = balance;
    }
    
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        CurrentAccount model = (CurrentAccount) o;
        return name.equals(model.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name);
    }
}

使用 .contains 将值与

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM