java - 从 HashMap 中删除值

标签 java

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

相关文章:

java - 如何在测试期间清除并重新创建 Flyway-play 生成的数据库

java - 为什么 java 中的 processBuilder 在 5 分钟后挂起?

java - 如何在拖动鼠标时平滑地填充椭圆

java - Android 发布高分辨率图像内存不足

Java - 让用户编写自己的代码,然后编译它,然后在同一运行时内使用它

java - Apache Camel WebDav 文件下载

java - 我可以在编译时链接 .jar,但不能在运行时链接

java - JSONObject 累加​​并把这个 "[]"字符串转换为数组

java - 我们是否应该像在 .Net 中那样在 java 中将 Java 源代码和 Junit 测试创建为不同的项目?

java - 第一个java程序无法运行