获取各种数据类型的ArrayList索引

时间:2013-12-10 12:01:12

标签: java arraylist

新手java学生在这里。我有一个ArrayList,其中包含包含字符串和整数的对象。对象的构造函数的结构类似于MyClass(String, String, int, int, String)。我想在构造函数中使用String的第一个实例找到ArrayList元素的索引,但我很难理解如何去做。我已经尝试使用indexOf()但是没有成功找到特定元素的索引。如果有人能指出我正确的方向,我将不胜感激。干杯

3 个答案:

答案 0 :(得分:1)

您必须查看如何覆盖班级中的equalshashcode方法。这是Collection的api用于执行此类操作的内容。

答案 1 :(得分:1)

您必须在MyClass中覆盖等于。 根据您希望实现的目标,您的equals方法看起来像:

public boolean equals(Object o) {
   if (o== null) return false;
   if (!(o instanceof MyClass)) return false;
   MyClass other = (MyClass) o;
   if (other.firstString != null && this.firstString != null 
    && this.firstString.equals(other.firstString) return true;
   return false;
}

编辑:您也应该覆盖hashCode。覆盖hashCode时,应考虑覆盖equals时考虑的对象。因此,如果基于属性 firstString 测试两个MyClass对象是否相等,则应该在hashCode中包含 firstString

public int hashCode() {
    if (firstString == null) return 31;
    return firstString.hashCode();

}

EDIT2: 调用indexOf时ArrayList的作用基本上是这样的: 'for(Entry e = header.next; e!= header; e = e.next){     if(o.equals(e.element))         回报指数;     索引++; }“

因此,每次调用indexOf()时,ArrayList都会在对象上调用equals方法。 所以假设你有一个如下所示的列表:

MyClass m1 = new MyClass("this is some random string", other params);
MyClass m2 = new MyClass("this is my target string", other params);
MyClass m3 = new MyClass("this is irrelevant", other params);

list.add(m1);
list.add(m2);
list.add(m3);

现在,您想知道包含“这是我的目标字符串”的MyClass对象的索引。 所以你打电话给indexOf:

list.indexOf(new MyClass("this is my target string"), other params);

并且,根据您的 equals 实现,它将返回1.

答案 2 :(得分:-1)

如果可以避免,首先不要认为你应该首先在列表中存储不同的类型?你真的拥有一些具有不同类型属性的对象列表吗?