gpt4 book ai didi

java - 从 Hashmap 中删除元素

转载 作者:行者123 更新时间:2023-12-02 09:21:14 25 4
gpt4 key购买 nike

从 HashMap 中删除元素

我需要向 HashMap 添加 10 个元素;姓名和出生日期。

removeAllSummerPeople 应删除所有六月、七月或八月出生的人。

非常不清楚需要做什么。

    public static HashMap<String, Date> createMap() throws ParseException {
DateFormat df = new SimpleDateFormat("MMMMM d yyyy", Locale.ENGLISH);
HashMap<String, Date> map = new HashMap<String, Date>();
map.put("Stallone", df.parse("JUNE 1 1980"));

//write your code here
map.put("a", df.parse("JUNE 1 1980"));
map.put("b", df.parse("JUNE 1 1980"));
map.put("c", df.parse("JUNE 1 1980"));
map.put("d", df.parse("JUNE 1 1980"));
map.put("e", df.parse("JUNE 1 1980"));
map.put("f", df.parse("JUNE 1 1980"));
map.put("g", df.parse("JUNE 1 1980"));
map.put("h", df.parse("JUNE 1 1980"));
map.put("i", df.parse("JUNE 1 1980"));


return map;

}

public static void removeAllSummerPeople(HashMap<String, Date> map) {
//write your code here
for(HashMap.Entry<String, Date> pair : map.entrySet()){
int x = pair.getValue().getMonth();
if (x>=6 && x<=8){
map.remove(pair.getKey());
}

}


}

最佳答案

我建议:

  • 扔掉Date类别和用途LocalDate过生日。 LocalDate来自java.time,现代Java日期和时间API,代表一个没有时间的日期,它似乎是你在这里需要的。要初始化您的 map 值,请使用 of工厂方法,例如LocalDate.of(1980, Month.JUNE, 1) .
  • 在 Java 8 及更高版本中,为了轻松删除值为 6 月、7 月或 8 月日期的 map 条目,请使用 Map.values()要获取 map 值集合的 Collection View ,请使用 removeIf Collection View 的方法来删除这些月份内的日期。这将从 map 中删除相应的条目。它要求您可以编写一个 lambda 作为参数传递给 removeIf .

你的代码有什么问题?

  • 避免 Date类(class)。它的设计一直很糟糕,现在已经过时了。使用LocalDate相反。
  • 即使类(class)要求使用 Date ,不要使用它的getMonth方法。这种方法已经被弃用了几十年(字面意思),因为它跨时区的工作不可靠。相比之下getMonth方法LocalDate工作良好且可靠。
  • 正如 Hadi Moloodi 长期以来所说,Date class 非常不自然地对月份进行编号,从 1 月的 0 到 12 月的 11,这就是为什么您的代码没有尝试删除任何条目。相比之下LocalDate.getMonth()返回 Month枚举常量如 Month.JUNE ,因此其含义几乎不会产生任何混淆。
  • 删除增强型 for 中的 map 条目循环条目将不起作用。它抛出 java.util.ConcurrentModificationException (大多数时候)(只是因为您的代码没有尝试删除任何条目,所以您没有得到此异常)。如果您无法使用removeIf上面提到的,尝试 Iterator及其 remove方法。

链接:Answer by Hadi Moloodi .

关于java - 从 Hashmap 中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58679299/

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