【问题标题】:hashmap and arraylist connectedhashmap 和 arraylist 连接
【发布时间】:2015-01-18 16:01:39
【问题描述】:

我的主要目的是让我的 arraylist 和 hashmap 始终连接。 从某种意义上说,连接意味着如果我在地图中添加任何东西,那么它应该被复制到 ArrayList 中,反之亦然。 大家有什么想法。

static Map<Integer,Employee> emp = new HashMap<Integer,Person>();
static ArrayList<Employee> ls = new ArrayList <Employee>(emp.values());

通过这段代码,我在HashMap 中添加的任何内容都会被复制到列表中,但是当我从ArrayList 中删除时,它不会反映在地图中。 请帮忙。

【问题讨论】:

  • 您应该使用您正在使用的特定编程语言标记您的问题。我猜它是 Java。
  • 是的,它的 java 语言

标签: java arraylist hashmap


【解决方案1】:

只需使用emp.values() 集合。它由地图支持,反之亦然。见http://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#values()

Collection&lt;Employee&gt; ls = emp.values();

如果您从此Collection 中删除某些内容,它也会从HashMap 中删除。 在您的示例中,您正在创建一个新的 ArrayList 并将所有元素的引用复制到其中。当然这个新的ArrayList 不知道你HashMap

一个简短的例子:

HashMap<Integer, String> map = new HashMap<>();
map.put(1, "One");
map.put(2, "Two");
map.put(3, "Three");

// Output is "{1=One, 2=Two, 3=Three}"
System.out.println(map);

Collection<String> backedUpCollection = map.values();

// Remove something from collection and check the maps content
backedUpCollection.remove("Two");

// Output is "{1=One, 3=Three}"; "Two" was removed
System.out.println(map);

// Add an entry to the map and check the content of collection
map.put(4, "Four");

// Output is "[One, Three, Four]"; "Four" was added
System.out.println(backedUpCollection);

【讨论】:

  • 我只使用过它...但它只能以一种方式工作。类似列表值已更新,但我希望如果我更改列表也应该更新该地图。
  • 如果您从列表中删除某些内容,它也应该从地图中删除。当然,不可能向列表中添加内容,因为您无法提供地图所需的密钥。
  • 不,我认为这就足够了。你真的需要ArrayList 吗?这个Collection 应该可以工作了。
  • 我正在使用arraylist,因为我无法直接使用EmployeeId通过映射删除整个对象Employee。
  • 我的结构:Employee-->id、name 和 map 的键是一个自增整数。
【解决方案2】:

你说:

从某种意义上说,连接意味着如果我在地图中添加任何东西,那么它应该被复制到 ArrayList 中,反之亦然。

但是假设你在数组列表中添加了一些东西,你希望哈希映射的键是什么?

一旦你决定了每个用例的行为,我建议的解决方案是编写你自己的添加和删除函数,它总是从数组和散列中添加/删除值。然后你可以使用那些封装了Java提供的方法的方法,而不是直接使用它们。

【讨论】:

    猜你喜欢
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2017-08-30
    • 2017-08-14
    • 2014-03-30
    相关资源
    最近更新 更多