【问题标题】:ArrayList in HashMap kotlinHashMap kotlin 中的 ArrayList
【发布时间】:2020-09-30 17:49:03
【问题描述】:

如何在 HashMap 内部的 ArrayList 中添加一些值?我的波纹管代码显示了 0 大小的哈希

val hash= HashMap<String, ArrayList<String> >()
    hash["bro"]?.add("Ali Umar")
    hash["sis"]?.add("Tamanna")
    hash["bro"]?.add("Faruk")
    hash["sis"]?.add("Aklima")
    hash["bro"]?.add("Ab Siddik")
    Log.d("Hash", hash.size.toString())

【问题讨论】:

    标签: android android-studio kotlin hashmap


    【解决方案1】:

    问题是下面的指令只是从 hashmap 中读取,没有插入任何东西

    hash["bro"]
    hash["sis"]
    

    因此,当您使用val hash= HashMap&lt;String, ArrayList&lt;String&gt; &gt;() 创建哈希图时,它是空的,并且“bro”和“sis”不存在。所以它为null并且不会调用add函数,因为?.如果值为null则跳过执行。

    所以要给 bro 和 sis 添加一些东西,你首先必须把值放到你的 hashmap 中。

    hash.put("bro",ArrayList<String>())
    hash.put("sis",ArrayList<String>())
    

    这将改变你的例子如下

    val hash= HashMap<String, ArrayList<String> >()
        hash.put("bro",ArrayList<String>())
        hash.put("sis",ArrayList<String>())
        hash["bro"]?.add("Ali Umar")
        hash["sis"]?.add("Tamanna")
        hash["bro"]?.add("Faruk")
        hash["sis"]?.add("Aklima")
        hash["bro"]?.add("Ab Siddik")
        Log.d("Hash", hash.size.toString())
    

    【讨论】:

      【解决方案2】:

      您必须先初始化 List 并将密钥和已初始化的 List 放入 HashMap 中,然后才能将更多项目添加到密钥的值中。在您的示例代码中,HashMap 中没有任何内容,也无法添加任何内容。

      试试这个(或类似的)

      fun main() {
          // initialize the hashmap
          val hash = hashMapOf<String, MutableList<String>>()
          // put the keys with empty lists into the hashmap
          hash.put("bro", mutableListOf())
          hash.put("sis", mutableListOf())
          // add items to the value (the list) of existing keys
          hash.get("bro")?.add("Ali Umar")
          hash.get("sis")?.add("Tamanna")
          hash.get("bro")?.add("Faruk")
          hash.get("sis")?.add("Aklima")
          hash.get("bro")?.add("Ab Siddik")
          // print size and content
          println("Hash size is ${hash.size.toString()}")
          println(hash)
      }
      

      在 Kotlin Playground 中输出

      Hash size is 2
      {sis=[Tamanna, Aklima], bro=[Ali Umar, Faruk, Ab Siddik]}
      

      【讨论】:

      • 非常感谢,兄弟!我也有问题。我想要一个像 kotlin 中的 c++(stl 库的地图)这样的地图。但是在 kotlin hashmap 中只是作为参考。例如,如果我从一个变量为 Hashmap 设置一个值,然后更改该变量的值,那么 Hashmap 的值也会改变?。但我不想要它。我想要就像 c++ stl map 一样。我该怎么点呢?也提前谢谢兄弟。
      • 谢谢兄弟,我通过.toMutableList()得到了上述问题的解决方案
      猜你喜欢
      • 2021-10-13
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-08
      • 2011-12-16
      相关资源
      最近更新 更多