【问题标题】:How to add same data value multiple times in hash map?如何在哈希图中多次添加相同的数据值?
【发布时间】:2017-09-30 06:35:08
【问题描述】:

我想在 hashmap 中添加值以作为表单数据发送。现在有些值是单一的,有些值我需要在数组列表的 for 循环中多次添加。

代码:

  data = new HashMap<String, String>();

                data.put("save", "1");
                data.put("disc", "");
                data.put("term_condi", edt_payment_terms.getText().toString());
                data.put("memo", edt_item_memo.getText().toString());
                data.put("note", edt_note.getText().toString());
                data.put("due_date", mDueDate);
                data.put("pay_terms", edt_payment_terms.getText().toString());
                data.put("currency_id", sessionData.getString("currency_id",""));
                data.put("currency_value",sessionData.getString("currency_value",""));
                data.put("invoice_date", mInvoiceDate);
                data.put("discount", mDiscount.toString());
                data.put("shipping", mShipping.toString());
                data.put("total", mTotalamount.toString());

                for (String email : mEmailList) {
                    data.put("send_to[]", email.toString());
                }

                for(Item item : mItemArrayList) {

                    data.put("tax[]", item.getItemTax());
                    data.put("qty[]", item.getItemQuantity());
                    data.put("item_name[]", item.getItemName());
                    data.put("unit_price[]", item.getItemUnitPrice());
                    data.put("disc[]", item.getDescription());

                }

                data.put("send", "1");

当我运行 for 循环时,我在我的 hashmap 中只得到它的最后一个索引。我无法在 for 循环中初始化哈希映射,所有其他单个值都会加倍。 我怎样才能做到这一点?请帮忙。谢谢..

【问题讨论】:

  • 您不能在 HashMap 中添加具有相同键的多个值。看来您应该在 for 循环中创建一个新的 HashMap's

标签: java android for-loop hashmap


【解决方案1】:

你可以: 1.使用以列表为值的地图。地图>。 2.创建一个新的包装器类并将该包装器的实例放置在地图中。地图。 3.使用类元组(节省创建大量包装器)。地图>。 4.并排使用多个地图。 例子

  1. 以列表为值的映射

    // 创建我们的地图 Map> peopleByForename = new HashMap>();

    // 填充它 列出人员 = new ArrayList(); people.add(new Person("Bob Smith")); people.add(new Person("Bob Jones")); peopleByForename.put("Bob", people);

    // 从中读取 列出鲍勃 = peopleByForename["Bob"]; 人 bob1 = bob[0]; 人 bob2 = bob[1];

这种方法的缺点是列表不能完全绑定到两个值。

  1. 使用包装类

    // 定义我们的包装器 类包装{ 公共包装器(Person person1,Person person2){ this.person1 = person1; this.person2 = person2; }

    public Person getPerson1 { return this.person1; }
    public Person getPerson2 { return this.person2; }
    
    private Person person1;
    private Person person2;
    

    }

    // 创建我们的地图 映射 peopleByForename = new HashMap();

    // 填充它 包装人 = 新包装() peopleByForename.put("Bob", new Wrapper(new Person("Bob Smith"), 新人(“鲍勃·琼斯”));

    // 从中读取 包装器 bob = peopleByForename["Bob"]; 人 bob1 = bobs.Person1; 人 bob2 = bobs.Person2;

这种方法的缺点是您必须为所有这些非常简单的容器类编写大量样板代码。

  1. 使用元组

// 你必须用 Java 编写或下载一个 Tuple 类,(.NET 自带)

// create our map
Map<string, Tuple2<Person, Person> peopleByForename = new HashMap<string, Tuple2<Person, Person>>();

// populate it
peopleByForename.put("Bob", new Tuple2(new Person("Bob Smith",
                                       new Person("Bob Jones"));

// read from it
Tuple<Person, Person> bobs = peopleByForename["Bob"];
Person bob1 = bobs.Item1;
Person bob2 = bobs.Item2;
This is the best solution in my opinion.

4. Multiple maps

// create our maps
Map<string, Person> firstPersonByForename = new HashMap<string, Person>();
Map<string, Person> secondPersonByForename = new HashMap<string, Person>();

// populate them
firstPersonByForename.put("Bob", new Person("Bob Smith"));
secondPersonByForename.put("Bob", new Person("Bob Jones"));

// read from them
Person bob1 = firstPersonByForename["Bob"];
Person bob2 = secondPersonByForename["Bob"];

此解决方案的缺点是这两个地图相关性并不明显,程序错误可能导致两个地图不同步。

【讨论】:

    【解决方案2】:

    HashMap 中,如果您使用相同的键添加值,HashMap 将用最后一个值替换现有键。 In the document of HashMap

    public V put(K key, V value)
    

    将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

    例如:

     HashMap map = new HashMap<String, String>();
     map.put("123", "1");
     map.put("123", "2");
    

    在这种情况下,map 的大小为 1(键 = "123",值 = "2")。

    我认为你应该创建一个格式为“str1,str2,str3”的字符串并将这个字符串放入 HashMap。在接收值的形式中,您使用 String.split(",") 获取每个值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-21
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      相关资源
      最近更新 更多