我在 android arraylist 中遇到了小问题,让我告诉你我在哪里遇到了问题。
我有一个自定义联系人对象,其中包含有关姓名、联系电话号码和唯一 ID 的详细信息。当我查询数据库时,我得到列表,并将存储在 ArrayList 中。
这是我的做法
Arraylist<contact> ctlist = new Arraylist(contact);
ctlist = getitemfromDB();
在下一个场景中,我会根据特定条件查询并获取一组联系人对象。我明白了 再次联系列表对象。
Arraylist<contact> newctlist = new Arraylist(contact);
newctlist = getitemfromDB(condition);
现在,如果我从 newctlist
中选择任何对象并在 ctlist
中搜索,尽管该对象存在于 ctlist 中
编译器说找不到对象。
我可以知道上面的方法有什么问题吗,如果我在同一个列表中搜索,即如果我从 newctlist 中选择一个对象并在其中搜索,我将得到正确的预期结果。
会出现什么问题。
最佳答案
正如 Mitch Wheat 所说,您正在尝试比较两个不同的对象。这是因为 List 使用 equals
方法来检索特定对象。我认为您没有在自定义类中覆盖它。
只需根据联系人类中的字段实现 equals
和 hashCode
方法即可。
事实上,您应该尝试始终重写类中的 equals
和 hashCode
方法,其中相等的含义与引用相等的含义不同,例如 bean 。请看一下there和 there 。此外,如果可以的话,请阅读 Josh Bloch 的《Effective Java》中的第三章,其中包含这些实现的质量规则(顺便说一句,阅读整本书,这很棒)。
请注意,有一些库可以帮助您正确实现这些(Java7 java.util.Objects
、Guava Objects
、apache commons EqualsBuilder
和HashCodeBuilder
)
要小心,因为这些方法必须具有非常精确的数学属性
关于java - 优化android中列表的支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13252801/