如果我想从Set中删除(“one”,1),我应该写什么作为Set remove()方法的参数

时间:2016-03-17 00:51:13

标签: java dictionary collections set

我正在从Java tutorial oracle学习 地图界面 并遇到以下声明:

  

Collection视图支持以多种形式删除元素 -   remove,removeAll,retainAll和clear操作,以及   Iterator.remove操作。

因此,我提出了以下代码,并尝试使用Collection.remove()方法从("one", 1)中删除其中一个元素,即Set sme1。但是,如果我想从sme1.remove()中删除("one", 1),我不确定应该写什么作为sme1方法的参数。有人可以帮帮我吗?在此先感谢您的帮助!

Map<String, Integer> m1 = new LinkedHashMap<>();
m1.put("one", 1);
m1.put("two", 2);
m1.put("three", 3);

Set<Map.Entry<String, Integer>> sme1 = m1.entrySet();
System.out.println(sme1);

sme1.remove(?);//what should I write as the argument to sme1.remove() method if I want to remove ("one", 1) from sme1.

System.out.println(m1);

1 个答案:

答案 0 :(得分:1)

不要从EntrySet中删除,从地图中删除,如下所示:

Map<String, Integer> m1 = new LinkedHashMap<>();
m1.put("one", 1);
m1.put("two", 2);
m1.put("three", 3);

System.out.println(m1);

m1.remove("one");

System.out.println(m1);

您告诉地图使用键=&#34; one&#34;删除元素。

与获取Set中所有Map.Entry并调用Map

Map.Entry.remove()相比,这是一个更清晰的解决方案

正如Java教程所述,所有Collection都支持remove()操作。在这种情况下,如果您要使用Set的{​​{1}}进行删除,则需要告知Map.Entry要删除的SetMap.Entry操作会在remove()中的每个条目上调用equals()方法。因此,您需要传递Collection以与其他Map.Entry进行比较,以便找到要删除的正确元素。

这样做会看起来像:

Map.Entry

不是很漂亮&#39;!