HashMap<String,Integer> counts = new HashMap<String, Integer>(); for (int i = 0; i < str.length(); i++) { char c = str.charAt(i); String sc = String.valueOf(c); if(counts.containsKey(sc)){ counts.put(sc, counts.get(sc) + 1); }else{ counts.put(sc, 0); } }有没有问题
时间: 2024-02-14 18:06:17 浏览: 26
这段代码的问题在于,当第一次遇到一个字符时,它的计数器会被设置为 0 而不是 1。这会导致计数器的值始终比实际计数少 1。
为了修复这个问题,可以将计数器的初始值设置为 1,而不是 0。另外,可以使用 `Map` 接口的 `merge()` 方法来更简洁地实现计数器的逻辑。以下是修复后的代码示例:
```java
HashMap<String, Integer> counts = new HashMap<String, Integer>();
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
String sc = String.valueOf(c);
counts.merge(sc, 1, Integer::sum);
}
```
这里的 `merge()` 方法会将给定的键和值合并到 `Map` 中。如果该键已存在,则使用提供的合并函数将旧值和给定值合并;否则,将给定值作为新值插入到 `Map` 中。在这个例子中,合并函数将旧值加 1,实现了计数器的逻辑。
相关问题
Map<String, List<String>> map = new HashMap<>();取List
要从`Map<String, List<String>>`中获取`List<String>`,可以使用`Map`的`get()`方法来获取对应的`List`值。示例代码如下:
```java
Map<String, List<String>> map = new HashMap<>();
// 添加数据到map
map.put("key1", Arrays.asList("value1", "value2", "value3"));
map.put("key2", Arrays.asList("value4", "value5"));
// 获取指定key对应的List
List<String> list = map.get("key1");
System.out.println(list);
```
在上述代码中,我们创建了一个`Map`对象`map`,并向其添加了一些数据。然后,通过调用`map.get("key1")`,我们可以获取到对应的`List<String>`。最后,我们打印输出了这个`List`。
static HashMap<String, ArrayList<String>> follow = new HashMap<>();
这是一个静态变量,在Java中,静态变量属于类而不是对象,可以通过类名直接访问。该变量名为follow,类型为HashMap<String, ArrayList<String>>,即键为字符串类型,值为字符串类型的ArrayList。这个HashMap用于存储每个字符串对应的一个字符串列表,可以用来表示关注某个用户的所有粉丝或者关注某个用户所关注的所有人。