Java android中列表的优化支持
我在arraylist android中遇到了一个小问题,让我告诉你我面临的问题 我有一个自定义联系人对象,它保存有关姓名、联系人号码和唯一ID的详细信息。当我查询数据库时,我会得到列表,并将其存储在ArrayList中 我是怎么做的Java android中列表的优化支持,java,android,list,arraylist,Java,Android,List,Arraylist,我在arraylist android中遇到了一个小问题,让我告诉你我面临的问题 我有一个自定义联系人对象,它保存有关姓名、联系人号码和唯一ID的详细信息。当我查询数据库时,我会得到列表,并将其存储在ArrayList中 我是怎么做的 Arraylist<contact> ctlist = new Arraylist(contact); ctlist = getitemfromDB(); Arraylist ctlist=新建Arraylist(联系人); ctlist=getit
Arraylist<contact> ctlist = new Arraylist(contact);
ctlist = getitemfromDB();
Arraylist ctlist=新建Arraylist(联系人);
ctlist=getitemfromDB();
在下一个场景中,我会根据特定条件查询并获取一些联系人对象集。我明白了
再次列出联系人列表对象
Arraylist<contact> newctlist = new Arraylist(contact);
newctlist = getitemfromDB(condition);
Arraylist newctlist=new Arraylist(联系人);
newctlist=getitemfromDB(条件);
现在,如果我从
newctlist
中选择任何对象并在ctlist
中搜索,尽管该对象存在于ctlist中
编译器说找不到对象
我可以知道上面的方法有什么问题吗?如果我在同一个列表中搜索,即如果我从newctlist中选择一个对象并在其中搜索,我将得到正确的预期结果
问题出在哪里。正如米奇·麦特所说,您正在尝试比较两个不同的对象。这是因为列表使用
equals
方法来检索特定对象。我想你没有在自定义类中重写它。
只需根据contact类中的字段实现equals
和hashCode
方法
事实上,您应该尝试在类中始终重写equals
和hashCode
方法,其中equality的含义与引用equality不同,例如bean。请看一看,然后。此外,如果可以,请阅读Josh Bloch的“有效Java”中的第三章,其中包含了这些实现的质量规则(顺便说一句,阅读整本书,它很棒)
请注意,有一些库帮助您正确实现这些功能(Java7java.util.Objects
、GuavaObjects
、apache commonsEqualsBuilder
和HashCodeBuilder
)
小心,因为这些方法必须具有非常精确的数学属性“现在,如果我从newctlist中选择任何对象并在ctlist中搜索,尽管该对象存在于ctlist编译器中,但表示找不到对象。”-这是因为它们是表示相同信息的不同对象。您需要按值搜索,而不是按引用搜索代码>在一行中(与
newctlist
相同)哦,,,按值搜索将非常耗时,对吧。。我需要循环它。。。如果我有1000个联系人,那该怎么办?@jlordo,我会写。。我从DB中获取过滤对象。。就这些。。。上面的情况没有什么不同..或者您可以只搜索数据库。这就是他们设计的目的。。。