我知道下面的代码给出了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;
}
答案 0 :(得分:2)
ArrayList#indexOf
使用Object#equals
比较方法。
如果您希望能够在HelperClass
中查找Collection
实例,则需要提供自己的,覆盖的equals
方法,还可能需要提供{{1} }一种,用于其他特定的hashCode
实现(Collection
,Map
等)。
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
}