gpt4 book ai didi

java - 从 HashMap 中删除值

转载 作者:行者123 更新时间:2023-11-30 03:31:16 27 4
gpt4 key购买 nike

在学习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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com