在学习java集合的早期阶段......
是否可以从 HashMap 中删除一个值,但保留其对应的键?如果是这样,这会被视为不好的做法吗?
我编写了以下测试来检查:
HashMap<String, String> map = new HashMap<String, String>();
map.put("one", "1");
map.put("two", "2");
map.put("three", "3");
map.values().remove("3");
//try map.get("one").remove("1");
for (String name: map.keySet()){
String key = name;
String value = map.get(name);
System.out.println(key + " " + value);
}
希望它能返回:
一个1 两个 2 三
但它返回:
一个1 两个2
我在 javadocs 或这里找不到任何可以帮助我回答我的难题的内容(至少我明白!)。
仅供引用 - 想要这样做的原因:
我有一个 HashMap 来存储 Person(键)和 Ticket(值)。
当一个人购买门票时,他们会被添加到 HashMap 中,以便我可以引用哪些人已经拥有门票。 (他们每人只允许一张票)。
当票证不再有效时,我会从 map 中删除键和值(人员和票证)。
然后,一个人可以购买另一张票,此时我创建一个新的键+值。如果一个人仍在我的 HashMap 中(但未与票证关联),那么我可以找到该键(人)并添加一个新值(票证),我认为这比删除它们然后重新添加更有效他们每次想买票?
顺便说一句,门票是可变的,因此它们是我的值(value)观。人是一成不变的。
最佳答案
您得到的原因:
one 1 two 2
是因为map是一个键值对。想想:
[one, 1] [two, 2]
每个“[]”之间是一对,并且需要彼此成为 map 的一部分。 我觉得在这种情况下使用 map 是一个不好的做法。
<小时/>如果我可以提出替代方案;我可能会创建一个 Person
对象来保存票证的值。这样您就可以拥有 Person
对象的集合。
例如:
List<Person> people = new ArrayList<Person>();
String ticket = people.get(0).getTicket();
String newTicket = "2"
people.get(1).setTicket(newTicket);
通过这种方式,您可以使用 getter 和 setter 更改和删除票证,并拥有良好的面向对象设计。
关于java - 从 HashMap 中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28971973/