使用默认值初始化 HashMap?

Tal*_*lon 5 java

我正在实现这里给出的 A* 搜索算法,https: //en.wikipedia.org/wiki/A *_search_algorithm

这一行表示我们需要使用 INFINITY 的默认值初始化一个映射,

gScore := map with default value of Infinity
Run Code Online (Sandbox Code Playgroud)

所以我在这里尝试,

Map<State, Double> gScore = new HashMap<State, Double>(Double.POSITIVE_INFINITY);
Run Code Online (Sandbox Code Playgroud)

这不起作用,但以下方法有效;

Map<State, Double> gScore = new HashMap<State, Double>((int) Double.POSITIVE_INFINITY);
Run Code Online (Sandbox Code Playgroud)

我想知道为什么,以及它会对我的实现产生什么影响(如果有的话)。

Lou*_*man 4

在 Java 中无法使用默认值初始化映射,并且您的第二个版本不会创建默认值为无穷大的映射,而是会尝试创建无限大的映射。(不是真的,但它会尝试创建尽可能最大的地图。)

相反,修改算法:无论何时map.get(key),检查该值是否为空,如果是,则将其替换为无穷大。

  • [Map.getOrDefault](https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#getOrDefault-java.lang.Object-V-)对此很有用。 (3认同)