【问题标题】:How to populate a hashmap from an array如何从数组中填充哈希图
【发布时间】:2011-02-04 17:57:28
【问题描述】:

我有两个数组(实际上是一个,但我为每列创建了两个)。我想用列表视图的值填充哈希图,但列表视图的所有元素都是数组的最后一个元素:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();
HashMap<String, String> map = new HashMap<String, String>();

    for (int i=0; i<13; i++)
    {
        map.put("left1", date[i]);
        map.put("right1", name[i]);
        mylist.add(map);
    }


SimpleAdapter  simpleAdapter = new SimpleAdapter(this, mylist, R.layout.row,
        new String[] {"left1", "right1"}, new int[] {R.id.left, R.id.right});
lv1.setAdapter(simpleAdapter);

有什么想法吗? 谢谢

【问题讨论】:

  • 你应该考虑只使用接口来声明你的变量,而不是把它限制在具体的实现中。 'List> myList' 会更好。
  • 其实应该是List&lt;? extends Map&lt;String,String&gt;&gt; myList(和Map&lt;String,String&gt; map)。但是,有一个论点是,每个变量都应该声明为它已知的最具体的类型。在该标准下,声明是好的,因为它们是函数的本地声明。 (作为参数,同样的标准规定它们应该被声明为最通用的类​​型,因为这就是关于它们的全部假设。)此外,这样它可以节省一两个导入。 :)

标签: java android hashmap


【解决方案1】:

您正在向数组的每个槽添加相同的映射。试试这个:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

for (int i=0; i<13; i++)
{
    HashMap<String, String> map = new HashMap<String, String>();
    map.put("left1", date[i]);
    map.put("right1", name[i]);
    mylist.add(map);
}

【讨论】:

  • +1:这就是为什么您必须小心放置变量声明的位置!
  • 什么意思?我试图在 oncreate 方法中声明数组,都在它之外,比如 String[] date = new String[13];
  • @erdomester:在您的原始实现中,您已经创建了一张地图。然后,您将通过循环并放置不同的值,但每次都使用相同的键(当然,覆盖它),这就是为什么它以数组中的最后一个值结束。 @Ted Hopp 的方法在每次循环运行时创建一个新映射,并将该映射与键和值添加到您的数组中。
  • 我从来没有想过这个。我更喜欢并且更了解数组 :) 谢谢!
  • 顺便说一句,我如何从列表视图中删除项目?我用谷歌搜索了几个主题,即使很多人这么说,适配器也没有 clear() 或 remove() 命令..
猜你喜欢
  • 2014-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 2015-05-30
  • 1970-01-01
  • 2011-04-20
相关资源
最近更新 更多