为啥我的数组列表只更改一个元素中的数据?

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&lt;Name, Number&gt; @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

JS <select> 列表框在单击/更改时不起作用

为啥 vuejs 子组件数据更改更新父数据也没有显式 $emit?

为啥我能够更改数组 [关闭]

React Native:为啥 FlatList 会在数据更改时完全重新渲染?