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

Java 获取各种数据类型的ArrayList的索引,java,arraylist,Java,Arraylist,这里是java新手。我有一个ArrayList,其中包含包含字符串和整数的对象。对象的构造函数的结构如下MyClass(String,String,int,int,String)。我想在构造函数中使用String的第一个实例来查找ArrayList元素的索引,但我不知道该怎么做。我尝试过使用indexOf(),但没有成功地找到特定元素的索引。如果有人能给我指出正确的方向,我将不胜感激。干杯您必须了解如何重写类中的equals和hashcode方法。这就是Collection的api用来执行此类操

这里是java新手。我有一个ArrayList,其中包含包含字符串和整数的对象。对象的构造函数的结构如下
MyClass(String,String,int,int,String)
。我想在构造函数中使用String的第一个实例来查找ArrayList元素的索引,但我不知道该怎么做。我尝试过使用
indexOf()
,但没有成功地找到特定元素的索引。如果有人能给我指出正确的方向,我将不胜感激。干杯

您必须了解如何重写类中的
equals
hashcode
方法。这就是
Collection
的api用来执行此类操作的内容。

您必须在
MyClass
中重写equals。 根据您希望实现的目标,您的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时,应该考虑重写equals时考虑的对象。因此,如果基于属性firstString测试两个MyClass对象是否相等,则应在hashCode中输入firstString

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

}
编辑2: ArrayList在调用indexOf时所做的基本工作如下: 'for(条目e=header.next;e!=header;e=e.next){ 如果(o等于(e元素)) 收益指数; 索引++; }"

所以,每次调用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);
现在,您想知道包含“this is my target string”的MyClass对象的索引。 所以你打电话给indexOf:

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

并且,根据equals实现,它将返回1。

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

我刚刚在看教程,试图找出如何将其应用于获取arraylist中某个特定元素的索引。因此,equals将其与其他对象进行比较,并返回true或false。对的哈希代码使用一个素数来确定结果是否等于1?我想,我还没有真正了解它。在集合中查找对象时,indexOf调用equals方法。如果不重写equals,将通过比较对对象的引用来测试对象是否相等。换句话说,只有当两个对象是同一个对象时,它们才会被视为相等。HashCode为对象指定一个唯一的值,并且在对象用作集合中的键(例如贴图)时调用。在计算哈希代码时使用素数是很常见的。我想我对equals和hashCode已经有了初步的了解,但我仍然不明白这如何导致我找到包含this.firstString的arraylist元素的索引。我错过了什么?我已经向我的导师询问过这件事,他们告诉我用谷歌搜索一下。非常感谢您的帮助。