Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java android中列表的优化支持_Java_Android_List_Arraylist - Fatal编程技术网

Java android中列表的优化支持

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 android中遇到了一个小问题,让我告诉你我面临的问题

我有一个自定义联系人对象,它保存有关姓名、联系人号码和唯一ID的详细信息。当我查询数据库时,我会得到列表,并将其存储在ArrayList中

我是怎么做的

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”中的第三章,其中包含了这些实现的质量规则(顺便说一句,阅读整本书,它很棒)

请注意,有一些库帮助您正确实现这些功能(Java7
java.util.Objects
、Guava
Objects
、apache commons
EqualsBuilder
HashCodeBuilder


小心,因为这些方法必须具有非常精确的数学属性

“现在,如果我从newctlist中选择任何对象并在ctlist中搜索,尽管该对象存在于ctlist编译器中,但表示找不到对象。”-这是因为它们是表示相同信息的不同对象。您需要按值搜索,而不是按引用搜索在一行中(与
newctlist
相同)哦,,,按值搜索将非常耗时,对吧。。我需要循环它。。。如果我有1000个联系人,那该怎么办?@jlordo,我会写。。我从DB中获取过滤对象。。就这些。。。上面的情况没有什么不同..或者您可以只搜索数据库。这就是他们设计的目的。。。