Fast way to load all alphabetic characters to a hashmap
例如,我有这个Hashmap:
1
| Map <String,Integer > map = new HashMap <>(); |
而不是map.put("A",0),map.put("B",0) ......直到map.put("C",0),我们有什么方法可以让它快速?
-
快点是什么意思? 表现明智吗?
-
为什么? 使用map.put("A", 0)有什么问题?
-
为什么String而不是Character作为地图键?
-
这是一个简化的例子吗? 如果没有,你为什么要这样做? 否则使用带索引约定的数组[char - 'A']
在for循环中执行:
1 2
| for (char ch = 'A'; ch <= 'Z'; ++ch )
map. put(String. valueOf(ch ), 0); |
使用双括号初始化。 它非常紧凑,有助于初始化集合。
1 2 3 4 5 6
| Map <String, Integer > map = new HashMap <String, Integer >() {
{
for (char ch = 'A'; ch <= 'Z'; ++ch )
put (String. valueOf(ch ), 0);
}
}; |
请注意 - 调用put方法而不使用地图引用。
试试这个:
1 2 3 4
| Map <String,Integer > map = new HashMap <>();
for (int i = 65; i <= 90; i ++) {
map. put(Character. toString((char) i ), 0);
} |
-
ASCII码(65和90)非常难以理解(幻数); 最好使用char:for(char i ='A'; i <='Z'; ++ i)等
-
是的,你是对的;)这只是一个例子。
-
@DmitryBychenko在这种情况下,可以详细说明或给出你的魔术数字的链接吗?
-
@Subir Kumar Sao"神奇数字"是源代码中的固定数字,没有解释为什么使用这个特定数字。 在这个例子中:什么是"65"? 为什么不"66"? 另请参见en.wikipedia.org/wiki/Magic_number_%28programming%29
-
@Subir Kumar Sao:当我说"65"和"90"是"魔术数字"时,我的意思是它们的意思不明确(什么是"90"?)。stackoverflow.com/questions/47882/
使用io.vavr
1 2 3 4 5 6 7 8 9 10 11
| public HashMap <String,Integer > alphanumericAlphabet () {
return CharSeq
. rangeClosed('0', '9')
. appendAll(CharSeq. rangeClosed('a', 'z'))
. appendAll(CharSeq. rangeClosed('A', 'Z'))
. map(character ->Tuple. of(
character. toString(),
Character. getNumericValue(character )
))
. collect(HashMap. collector());
} |