我对 Java 和 Android 中的列表有疑问。我使用以下代码读取所有用户联系人并将其保存在列表中:
List<ContactInfo> list = new ArrayList<ContactInfo>();
ContactInfo contactInfo = new ContactInfo();
do {
contactInfo.name = people.getString(indexName);
contactInfo.phone = people.getString(indexNumber);
list.add(contactInfo);
} while (people.moveToNext());
在一切正常的情况下,姓名和电话正确,但列表未正确保存值(具体而言,它正确保存了值但不在执行中,每个值都被最后插入的值替换) . 它只是保存每个位置的最后一个联系人,但是如果我尝试调试他在执行过程中在每个位置添加的内容,它会显示正确的值。
这是我用来检查每个项目的代码
int i = 0;
for(ContactInfo info : list)
{
Log.d(newMessage.TAG, "contactInfo(" + i + "): name = " + info.name + " ; phone = " + info.phone);
++i;
}
我已经解决了这个编辑的问题:
do {
contactInfo = new ContactInfo();
contactInfo.name = people.getString(indexName);
contactInfo.phone = people.getString(indexNumber);
list.add(contactInfo);
} while (people.moveToNext());
它会为每个联系人创建一个不同的 ContactInfo 实例,但是如果我在空闲时创建一个,为什么不工作呢?
而且,如果我为每个联系人创建一个不同的实例,如果联系人数量太多,它可能会导致内存泄漏/内存不足或类似情况?或者只是让应用程序变慢,因为 GC 应该清除内存?