使用助手时在Android中使用indexOf()

时间:2019-02-14 17:53:22

标签: java android android-studio arraylist indexing

我知道下面的代码给出了Java中该特定元素的索引。

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

list .add("100");

Log.d("TAG",String.valueOf(list.indexOf("300")));

但是在使用辅助类时如何获取元素的索引?

List<HelperClass> Arraylist= new ArrayList<>();

Arraylist.add(new HelperClass(name, email, phoneno));

Log.d("TAG", String.valueOf(new HelperClass(Arraylist.indexOf(name,email,phoneno))));

我到处搜索了此内容,但找不到。有人可以告诉我在使用模式添加数据时如何在arraylist中找到特定项目的索引吗?

很显然,我尝试过的地方是错误的,它在整行下方显示红线,但我只是键入该代码以了解您要实现的目标。有人可以给我一种方法吗?

助手

 @Override
public int hashCode() {
    int result = getName() != null ? getName().hashCode() : 0;
    result = 31 * result + (Email != null ? Emaail.hashCode() : 0);
    result = 31 * result + (PhoneNo!= null ? PhoneNo.hashCode() : 0);

    return result;
}

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (!(o instanceof Helper)) return false;

    Helperthat = (Helper) o;

    if (getName() != null ? !getName().equals(that.getName()) : that.getName() != null)
        return false;
    if (Email != null ? !Email.equals(that.Email) : that.Email != null)
        return false;
    if (PhoneNo != null ? !PhoneNo.equals(that.PhoneNo) : that.PhoneNo != null)
        return false;

}

2 个答案:

答案 0 :(得分:2)

ArrayList#indexOf使用Object#equals比较方法。

如果您希望能够在HelperClass中查找Collection实例,则需要提供自己的,覆盖的equals方法,还可能需要提供{{1} }一种,用于其他特定的hashCode实现(CollectionMap等)。

Set

您显然需要具有适当的class HelperClass { ... @Override public boolean equals(final Object object) { if (object == this) { return true; } if (!(object instance of HelperClass)) { return false; } final HelperClass other = (HelperClass) object; return name.equals(other.name) && email.equals(other.email) && phone.equals(other.phone); } } 实例才能找到匹配项。

HelperClass

答案 1 :(得分:1)

indexOf要求对象作为输入。如果找不到要传递的对象,它将返回-1。您需要将要在数组列表中查找其位置的对象作为indexOf函数的输入。

解决方案: 创建一个HelperClass传递给indexOf方法:

.indexOf(new HelperClass(name, email, phoneno));

但是,该更改本身仍将返回-1。请参阅API文档以获取indexOf:

  

public int indexOf(Object o)

     

返回指定元素中第一次出现的索引   此列表;如果此列表不包含元素,则为-1。更多   形式上,返回最低索引i,使(o == null?get(i)== null   :o.equals(get(i))),如果没有这样的索引,则为-1。

它使用等于来确定是否找到匹配项。您应该在HelperClass类上覆盖了equals方法,因此它使用java.lang.Object中的默认实现,该实现将对引用进行比较,并且仅在两个HelperClass引用相同的对象时才返回true。

在您的HelperClass类上覆盖等于和哈希码,例如:

@Override public boolean equals(Object other) {
    if (!(other instanceof HelperClass)) {
        return false;
    }
    HelperClass otherHelperClass = (HelperClass)other;
    return otherHelperClass.x == this.x && otherHelperClass.y == this.y;
}

@Override public int hashCode() {
    return x + y; // same values should hash to the same number
}