我正在从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);
答案 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
要删除的Set
。 Map.Entry
操作会在remove()
中的每个条目上调用equals()
方法。因此,您需要传递Collection
以与其他Map.Entry
进行比较,以便找到要删除的正确元素。
这样做会看起来像:
Map.Entry
不是很漂亮&#39;!