新手java学生在这里。我有一个ArrayList包含包含字符串和整数的对象。该对象的构造函数的结构如下MyClass(String, String, int, int, String)
。我想在构造函数中使用String的第一个实例来查找ArrayList元素的索引,但是我很难理解如何去做。我试过使用indexOf()
,但没有成功找到特定元素的索引。如果有人会指出我正确的方向,我将不胜感激。干杯获取各种数据类型ArrayList的索引
0
A
回答
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时考虑的对象。所以,如果你测试相等对两个MyClass的对象基于财产firstString,你应该inlcude firstString中的hashCode
public int hashCode() {
if (firstString == null) return 31;
return firstString.hashCode();
}
EDIT2: 什么ArrayList中,当你调用的indexOf基本上是这样做: “为(Entry e = header.next; e!= header; e = e.next)if(o.equals(e.element)) return index; index ++; }'
因此,每次调用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);
,并根据您的等于实现,它将返回1
1
你必须看看如何覆盖你的班级中的equals
和hashcode
方法。这是Collection
的api用来执行这种操作的东西。
-1
不要以为你真的应该在列表中的离子来存储不同类型如果你能避免它的第一个地方?你真的有一个具有不同类型属性的对象列表吗?
相关问题
- 1. 各种数据类型
- 2. Java ArrayList与各种类型的对象
- 3. 搜索,获得的各种数据
- 4. 各种数据类型订货代表
- 5. ArrayList,获取值,从索引()到索引()
- 6. Lucene Zend,索引.doc,.pdf和各种类型的文件
- 7. 从字典数组ArrayList获取索引
- 8. 使用数据绑定获取各种类型项目列表的输入
- 9. 各种类型的集合
- 10. flex中的各种wsdl数据类型的等效数据类型?
- 11. 支持各种数据类型的数据结构
- 12. 如何在Android中获取ArrayList的模型数据类型?
- 13. 数据类型和索引
- 14. 正常化具有类似数据类型的各种属性
- 15. 如何从索引搜索(有多种类型)中获取每种类型的前1个文档?
- 16. 如何获得elasticsearch中每种类型索引的计数?
- 17. 从各种文档类型
- 18. C++各种数据类型的可变数组?
- 19. 各种数据类型的Haskell IO函数
- 20. 具有各种输入数据类型的scala函数
- 21. 返回各种数据类型的函数
- 22. 各种ng-repeat中的两个$索引
- 23. 从不同数据类型的ArrayList获取最高编号
- 24. 有关C++中各种数据类型的sizeof()的说明
- 25. ArrayList/LinkedList获取第一个索引号
- 26. 在NSDictionary中存储各种数据类型的新对象
- 27. JPA存储各种类型的数据库文件(JEE6)
- 28. 哪个数据库节省了各种类型的变量集?
- 29. 在数据库的单列中存储各种对象类型
- 30. 如何通过AJAX .post()传递各种类型的数据?
我正在查看教程,并试图理清如何将其应用于获取arraylist中特定元素的索引。 – Spud
所以等于把这个和其他值进行比较并返回true或false。正确?哈希码使用素数来确定结果是否等于1?我想,我还没有真正想过。 – Spud
当在集合中查找对象时,indexOf调用等于方法。如果您不覆盖equals,则会通过比较对象的引用来测试对象是否相等。换句话说,只有当它们是SAME对象时,两个对象才会被视为等于。 – Maggie