【问题标题】:Map implementaion using arraylist as value使用arraylist作为值的映射实现
【发布时间】:2014-05-15 18:12:39
【问题描述】:

我是第一次在我的代码中使用地图,因此需要各位专家提供一些意见。

我的要求是我必须从数据库中检查两个不同的表。第一个表的值将用作 Key,第二个表的值将用作键的 Value

每个键都有多个值,因此我将针对每个键的所有值存储在数组列表中,即我的地图将类似于 MAP。

现在,我的问题如下:

  1. 我不知道总数。键,所以我不能提前创建数组列表对象。如何管理?
  2. 如何检查映射中是否存在键,如果存在,那么我必须只更新与其对应的数组列表。如果它不存在,则创建新键,创建与其对应的arraylist,用值填充arraylist。
  3. 最后我必须迭代整个地图并使用键和值。

如何实现?我是否遵循正确的方法?如果不是,有什么更好的方法?

谢谢

【问题讨论】:

    标签: arraylist map iterator key


    【解决方案1】:
    1. 使用 Java 中的列表,您无需预先知道大小。这是对数组的要求。因此,只需创建您的地图

      Map> myMap = new HashMap();

    2. 这应该可以工作

      if (myMap.containsKey(someKey)) { myMap.get(someKey).add(someValue); // 向已经在地图中的列表添加一个值 } 别的 { myMap.put(someKey, Arrays.asList(someValue)); // 插入一个新的键/值 }

    3. 如果你需要遍历列表中的所有值,那么你需要一个嵌套的 for 循环

      for (Map.Entry> entry : myMap.entrySet()) { // 你的密钥 = entry.getKey() for (ValueType 值: entry.getValue()) { // 使用你的值 } }

    http://docs.oracle.com/javase/7/docs/api/java/util/Map.html

    希望对您有所帮助。

    【讨论】:

    • 感谢斯科特的回复。除了第 2 步之外,我使用的是相同的方法。在第 2 步中,我使用了: --LoopStarts ArrayList values = map.get(somekey); if (values==null) { values = new ArrayList(); map.put(user, values) } values.add(someValue); --LoopEnds 实际上,我在某处读到它的性能效率更高。是这样吗?
    • 是的。这可能更有效。我的代码有一个额外的检查(包含密钥())。您的代码将列表初始化拆分并放入两个语句中。我相信除此之外它们是相同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-18
    • 2019-06-20
    • 2016-07-02
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多