【发布时间】:2018-03-03 16:39:18
【问题描述】:
我正在 java 中进行以下编码挑战:
/**
* 4. Given a word, compute the scrabble score for that word.
*
* --Letter Values-- Letter Value A, E, I, O, U, L, N, R, S, T = 1; D, G = 2; B,
* C, M, P = 3; F, H, V, W, Y = 4; K = 5; J, X = 8; Q, Z = 10; Examples
* "cabbage" should be scored as worth 14 points:
*
* 3 points for C, 1 point for A, twice 3 points for B, twice 2 points for G, 1
* point for E And to total:
*
* 3 + 2*1 + 2*3 + 2 + 1 = 3 + 2 + 6 + 3 = 5 + 9 = 14
*
* @param string
* @return
*/
我的想法是通过执行以下操作将所有这些字母插入哈希图中:
map.add({A,,E,I,O,U,L,N,R,S,T}, 1);
有没有办法在java中做到这一点?
【问题讨论】:
-
当然。
map.put('A', 1); map.put('E', 1);等。或者只是在键数组上使用循环。 -
所以我不能在一个声明中做到这一点。
-
是的,您可以,例如使用流 api 或 List.forEach。
-
请注意,将集合作为键是非常低效的,因为需要经常进行哈希计算,这需要一遍又一遍地迭代整个键的集合。当然,您可以使用缓存其哈希值的自定义集合或忽略集合的哈希值而仅比较身份的 IdentityHashMaps 来解决此问题。
-
“我真正想要的是一个语句,我可以在其中将所有这些具有相同值的字母存储在 hash_map 中。”所以你应该在问题中提到这一点。如果您想要一个声明,请说出来。虽然这可能不是一件好事。
标签: java