从java

时间:2015-12-30 17:58:56

标签: java hashmap concurrenthashmap

您好我的Map变量定义如下:

Map<String,List<Event>> myMap = new HashMap<String,List<Event>>();

让我们说(键:值)对是(abc:(x1,x2,x3)),(pqr:(x2,x4,x5))和(xyz:(x4,x2,x9))。< / p>

现在,要删除我们将执行myMap.remove(&#34; pqr&#34;),但这会删除整个(键:值)对集。 但我想要的是只删除集合中的x5(x2,x4,x5),以便它导致(pqr:(x2,x4))。

请通过建议一些有效的方法来帮助我实现这一目标。

5 个答案:

答案 0 :(得分:3)

简单地:

this

答案 1 :(得分:1)

考虑到值为ArrayList,您必须获取键“pqr”的值,并从上面的答案中删除arraylist中的数据。

答案 2 :(得分:0)

myMap.put(key,value)将更新键,值配对(并返回原​​始值),因此我建议您将所需的新值添加到地图中。

答案 3 :(得分:0)

我不知道你是否真的可以这样做(意思是配置限制),但似乎你有某种MultiMap要求。

我建议(如果可以的话)看看一些MultiMap实现,例如Guava。请参阅相关的herehere

答案 4 :(得分:0)

我不知道您的完整规格和要求,但为了决定用于存储事件的结构,您必须考虑是否需要重复或/和排序。

关于效率,由于您需要搜索对象(删除它),我会选择

Map<String, Set<Event>> myMap = new HashMap<String, Set<Event>>();
来自番石榴的

Multimap

如果您不关心订购,请在添加/删除

时使用HashSet<Event> O(1)

如果需要自然排序,请在添加/删除

时使用TreeSet<Event> O(登录)

如果需要插入排序,请在添加/删除

上使用LinkedHashSet<Event> O(1)

注意:如果您接受重复项(这是在List上选择Set的一个很好的理由),myMap.get(pqr).remove(x5);只会删除此对象的第一次出现。如果您需要删除x5的每个出现,则以下内容将起作用:

myMap.get(pqr).removeAll(Collections.singleton(x5));