描述
Map 与Collection同级 键值对 数据按一对为单位存储 python中的字典
Map ->双列集合的顶层接口
HashMap-> 哈希表存储 没有固定顺序
LinkedHashMap
//Map中常用方法
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("123qwe", 1101); //添加元素
map.put("das", 43);
map.put("daw", 78);
map.remove("dasa"); //删除键对应的键值对 没有则不删不报错。
map.size(); //获得集合的大小
map.clear(); //清空
map.get("das"); //根据输入的键 获得对应的值,没有则返回null
//判断方法
map.containsKey("das"); //是否存在某个键
map.containsValue(43); //是否存在某个值
//修改方法
map.put("das", 1001); //键值对重复的添加会将前面的值覆盖。
//键值对的存取没有顺序
Map遍历方式
1.keySet (建)
2.entrySet (整体)
// 使用迭代器,for, foreach, while不做过多赘述
//第一种遍历思路 获取键的集合
Map<String, String> map2 = new HashMap<String, String>();
map2.put("s111", "aaa");
map2.put("s112", "bbb");
map2.put("s113", "ccc");
map2.put("s114", "ddd");
map2.put("s115", "eee");
Set<String> keySet = map2.keySet(); //键的集合
Iterator<String> iterator = keySet.iterator();
while (iterator.hasNext()) {
String key = iterator.next(); //遍历获取键的内容
System.out.println(key+"-->"+map.get(key)); //键+map.get(键) 获取键和值
}//或
for (String key : keySet) {
System.out.println(key+"-->"+map.get(key));
}
// 第二种 EntrySet 遍历 同时获取了键和值
Set<Entry<String,String>> entrySet = map2.entrySet();
Iterator<Entry<String, String>> iterator2 = entrySet.iterator();
while (iterator2.hasNext()) {
Entry<String, String> next = iterator2.next();
System.out.println(next.getKey()+"-->"+next.getValue());
}//或
for (Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey()+"==>"+entry.getValue());
}
//HashSet 由 HashMap实现出来 将值隐藏掉了 所以原理也一样
//linkedHashMap 顺序固定的Map
案例
//统计字符出现的次数
Scanner reader = new Scanner(System.in);
System.out.println("Input the string: ");
String string = reader.nextLine();
char[] array = string.toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (int i = 0; i < array.length; i++) {
if (!map.containsKey(array[i])) {
map.put(array[i], 1);
}else {
int count = map.get(array[i]);
map.put(array[i], count+1); //或++count
}
//或
// map.put(array[i], map.containsKey(array[i])?map.get(array[i])+1:1);
}
Set<Character> set = map.keySet();
Iterator<Character> iterator = set.iterator();
while (iterator.hasNext()) {
Character next = iterator.next();
System.out.println(next+" have "+map.get(next));
}
//StringBuilder 输出
StringBuilder stringBuilder = new StringBuilder();
for (Character character : set) {
stringBuilder.append(character+" have "+map.get(character)+",");
}
System.out.println(stringBuilder.deleteCharAt(stringBuilder.length()-1));