集合(24):Map集合案例
/*
"aababcabcdabcde",获取键盘录入字符串中每一个字母出现的次数
要求结果:a(5)b(4)c(3)d(2)e(1)
1、键盘录入一个字符串
2、使用TreeMap集合对象
键:Character
值:Integer
3、将字符串转换从字符数组
4、遍历字符数组获取每一个字符
5、拿着获取到的字符去集合中键去找,看看有没有这个键
如果没有,就把这个字符当作key,value值为1进行存储
如果有,就把该字符对应的值+1,重新存储到集合中
6、定义一个StringBuffer作为拼接
7、遍历集合,得到键和值,按照指定的输出对进行拼接a(5)b(4)c(3)d(2)e(1)
8、将StringBuffer转换成字符串输出
*/
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
public class MapTest1 {
public static void main(String[] args) {
//创建键盘录入对象
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个纯英语的字符串:");
String s = sc.next();
//创建TreeMap集合对象
TreeMap<Character, Integer> map = new TreeMap<>();
//将字符串转换从字符数组
char[] chars = s.toCharArray();
//遍历字符数组获取每一个字符
for (char c : chars) {
//拿着获取到的字符去集合中键去找,看看有没有这个键
Integer value = map.get(c);
if (value == null) {
map.put(c, 1);
} else {
value++;
map.put(c, value);
}
}
//定义一个StringBuffer作为拼接
StringBuffer sb = new StringBuffer();
//遍历集合得到每一个键和值
Set<Map.Entry<Character, Integer>> entries = map.entrySet();
for (Map.Entry<Character, Integer> entry : entries) {
Character key = entry.getKey();
Integer value = entry.getValue();
sb.append(key).append("(").append(value).append(")");
}
//将StringBuffer转换成字符串输出
String string = sb.toString();
System.out.println("计算每个字符的个数为:" + string);
}
}
面试题
1、HashMap与Hashtable的区别
(1)HashMap中的key和value允许为null值,而Hashtable不允许
(2)Hashtable是线程安全的,HashMap是线程不安全的
2、Map(接口)元素是由key和value键值对组成,key是唯一的,value是可以重复的
--HashMap
当引用数据类型作为key的时候,该类型必须重写hashCode()和equals()方法,保证唯一
--LinkedHashMap
哈希表保证唯一(键唯一)
链表保证有序(存储和取出顺序一致)
--TreeMap
当引用数据类型作为key的时候,有两种排序方式
自然排序
比较器排序(推荐)