利用集合计算字符串中每个字符的出现个数(HashMap)

package practice.demo24;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class HashMapTest {
/*
利用集合计算字符串中每个字符的出现个数(字符不可重复,个数可以重复:可以利用hashMap)
先分析,不写代码:1.得到一个字符串 两种方式(第一种:直接String创建出一个字符串 第二种:利用Scanner输入字符串)
2.将得到的String 利用tochar(一下子也不想起来,大概是这个样子) 转换成字符数组
3.创建Hashmap集合Map<String,Inteager>
3.遍历数组
4.利用集合contain方法判断 是否存在字符,利用put方法存入map
有两种情况第一种 contain true:说明存在这个字符,利用get方法得到存在的个数,然后加1,put
第二种conatin false:说明不存在这个字符,直接利用put存入1
5.输出map集合
*/
public static void main(String[] args) {
//1.得到字符串
String a = "asfvfb";
//2.用toCharArray方法得到数组,分析的时候方法一下子想不到全名,很尴尬
char[] chars = a.toCharArray();
//3.创建map集合
Map<Character, Integer> map = new HashMap<>();
//4.遍历集合
for (int i = 0; i < chars.length; i++) {
//取值
char oneChar = chars[i];
//第一种true
if (map.containsKey(oneChar)) {
Integer integer = map.get(oneChar);
integer++;
map.put(oneChar, integer);
}
//第二种false
else {
map.put(oneChar, 1);
}
}
System.out.println(map.containsValue(2));
//5.遍历map
Set<Map.Entry<Character, Integer>> entries = map.entrySet();
for (Map.Entry<Character, Integer> set : entries) {
System.out.print(set+" ");//a=1 b=1 s=1 f=2 v=1
}
/*总结:与分析不相符的地方
第一,toCharArray方法记得不清楚
第二,分析的时候认为创建Map集合为Map<String,Integer>,实际上应该是Map<Character,Integer>
第三:发现containS方法包含两个一个是containsKey,是否包含key值,第二个containsValue是否包含value值,两个方法,
不过因为Map集合中key不可以重复,value可以重复的特性,所以使用containsValue的可能性较小
第四,遍历Map集合是有两种方法的,这里的话我用entrySet方法 创建set对象接受我打不出来,是利用idea的var快捷方式创建得改进
第一种是我使用的entrySet方法 获取键值对对象,并遍历他
第二种是使用keySet方法,获取key值,通过get方法:键找值的方法,并遍历
遍历Map也有两种方式:第一种:我使用的增强for循环,创建对象Map.Entry<Character, Integer> set,这里就是你Set这个<>里面的东西搬过来创建
第二种:利用迭代器,iterator()方法获取迭代器 利用while(.hasnext) .next()方法输出
* */

}
}
posted @ 2020-06-08 17:32  七七负柒柒  阅读(523)  评论(0)    收藏  举报