【发布时间】:2019-06-28 17:07:09
【问题描述】:
所以,我有一个自定义类和该类类型的数组列表。现在,我想仅使用构成该类对象的其他属性中可用的 ID 来检索此数组列表中对象的索引。
在网上看到了一些例子,但我有点困惑,它们覆盖了 hashCode() 和 equals(),并且在 equals() 中它们检查了所有属性,我只想检查 ID 值,因为每个对象的 ID 都是唯一的。
public class MyClass {
private String ID;
private String name;
private String userName;
private String position;
// Constructors and getters and setters
}
所以,我想要的是,比如说这段代码:
List<MyClass> list=new ArrayList<>();
//Values are populated into list
int i=list.indexOf(someObjectsID); //Where someObjectsID is a String and not a MyClass object
int 我将在列表中拥有 ID 等于 someObjectsID 的 MyClass 对象的 indexOf
【问题讨论】:
-
你能不能只创建一个方法:list.stream().filter(myClass -> myClass.getID().equals(someObjectsID)) 返回MyClass,然后调用list.indexOf()结果呢?
-
那肯定行得通,但话又说回来,我不必重写 hashCode() 和 equals() ,因为这似乎是使用 indexOf 和自定义对象列表的规范吗?另外,这两个步骤不会导致更长的列表滞后吗?
-
几乎没有。您确实需要进行两次列表遍历。但除非你在做 Google Code Jam 问题,否则我认为你不会注意到任何时间复杂度差异。
-
当搜索键在对象本身内部时,如果不遍历,就无法在任何数组或列表中获取对象的索引。您必须遍历每个对象并将搜索键与对象字段匹配并返回找到它的对象的索引。为了避免较长列表中的滞后,您必须通过使用 HashMap 或 HashTable 将您的字符串 ID 与索引映射来做一些索引,这反过来又需要您为 MyClass 覆盖 hashCode 和 equal 方法
标签: java android arraylist custom-lists