您好我的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))。
请通过建议一些有效的方法来帮助我实现这一目标。
答案 0 :(得分:3)
简单地:
this
答案 1 :(得分:1)
考虑到值为ArrayList,您必须获取键“pqr”的值,并从上面的答案中删除arraylist中的数据。
答案 2 :(得分:0)
myMap.put(key,value)将更新键,值配对(并返回原始值),因此我建议您将所需的新值添加到地图中。
答案 3 :(得分:0)
答案 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));