为啥我的数组列表只更改一个元素中的数据?
Posted
技术标签:
【中文标题】为啥我的数组列表只更改一个元素中的数据?【英文标题】:Why is my arraylist only changing the data in one element?为什么我的数组列表只更改一个元素中的数据? 【发布时间】:2012-06-13 21:42:35 【问题描述】:我有 3 个数组列表。 最终目标是将列表视图中的所有电话号码更改为联系人姓名。
fetchContactNumbers() 返回我设备中所有电话号码 (31) 的列表。
fetchContactNames() 返回我设备中所有联系人姓名 (31) 的列表。
newList 中有 6 个电话号码。
我正在做的是根据 fetchContactNumbers() 的位置将 newList 中的数字更改为 fetchContactNames() 中的相应名称。因此,由于 fetchContactNumbers() 和 fetchContactNames() 的元素顺序正确,newList 将在 fetchContactNumbers() 中查找匹配项,索引该位置,然后使用 fetchContactnames() 中的该位置将 newList 中的数字设置为其代表名称。 这是我为测试更清晰的图片而制作的示例:
作为控制台应用测试的示例: http://pastebin.com/pApHNkXa
这是我活动中的代码:
// change displayed numbers into contact names
for(int i = 0; i < newList.size(); i++)
int index = fetchContactNumbers().indexOf(newList.get(i));
if(fetchContactNumbers().contains(newList.get(i)))
newList.set(i, this.fetchContactNames().get(index));
从那里,newList 被传递到我的 CustomAdapter 类以填充我的列表视图。
上述代码的问题(根据我的示例是正确的)是,当我在我的应用程序中运行它时,只有 newList.get(3) 更改为正确的名称。
有谁知道为什么只有一个名字在改变而不是全部?我检查了 logcat,它显示相同的内容,没有错误。
【问题讨论】:
您没有想过要使用HashMap
来实现这个目标?当您有两个数字和名称的数组列表时,您的 HashMap 似乎是更好的方法,HashMap<Name, Number>
@hawaii.five-0 我将如何实现这一目标?
只需创建带有名称和数字的HasMap,名称将是键和数字值,它会更有效,更简单。
@hawaii.five-0 你有如何做到这一点的教程吗?我已经搜索过,但似乎找不到与我的情况有关的任何内容。
【参考方案1】:
您可以按如下方式构建地图。如果您重视字母排序而不是效率,请使用 TreeMap 而不是 HashMap。
Map<String,String> contacts = new HashMap<String,String>;
List<String> numbers = fetchContactNumbers();
List<String> names = fetchContactNames();
for(int i = 0; i < numbers.size(); i++)
contacts.put(numbers.get(i),names.get(i));
确保您还导入了 HashMap 和 Map
import java.util.HashMap;
import java.util.Map;
然后只需重写您的 CustomAdapter 即可为 HashMap 工作。 Here 是一些关于如何使用 HashMap 的示例
【讨论】:
以上是关于为啥我的数组列表只更改一个元素中的数据?的主要内容,如果未能解决你的问题,请参考以下文章
为啥每次我更改视图并返回它时我的数组都会覆盖自身 - swift 3