一 基本概念
* Map集合不继承collection接口 也不继承iterable接口(不能直接foreach遍历)
* 无序
* Map集合一次存储两个元素 KV对形式 key值是set集合表现 value值是list集合表现
* Map集合常用的API
* 1)添加操作>put(O key,O value) putAll(map m)
* 2)删除操作>remove(key)
* 3)查询操作>
* int size() 键值对个数
* boolean isEmpty() 判断键值对个数是否为0
* O get(O key) 返回指定key对应的value值 不存在 返回null
* boolean containKey(O key) 判断是否包含指定key
* Set keySet() 返回Map中所有key所组成的set集合 可以用于遍历 (常用)
* Set<Entry> entrySet 返回Map中所有键值对所组成的set集合 可以用于遍历(了解)
二 API介绍
public class HashMapDemo {
// 需求>存储电话号
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
// 增
map.put("古天乐","1111");
map.put("彭于晏","2222");
map.put("福尔摩斯","3333");
System.out.println(map);
// 删
map.remove("福尔摩斯");
System.out.println(map);
// 改(没有专门方法)
map.put("彭于晏","4444");
System.out.println(map);
// 查
// 键值对个数
int ele = map.size();
System.out.println(ele);
// 查询对应的key
boolean key = map.containsKey("彭于晏");
boolean value = map.containsValue("3333");
System.out.println(key); // T
System.out.println(value); // F
// 给key 查value
String val = map.get("古天乐");
System.out.println(val); // 1111
// 遍历一
// 1)先获取Map集合中的key的set集合
Set<String> keySet = map.keySet();
// 2)遍历set集合获取key值
// 可以迭代器也可以加强for循环
for (String k: keySet) {
// 3)获取key对应的value值
String v = map.get(k);
System.out.println(k+"==>"+v);
}
System.out.println("----------------------------");
// 遍历二
// 通过获取Entry的set集合 Entry<K,V>接口 泛型
Set<Map.Entry<String, String>> entry = map.entrySet();
for (Map.Entry<String, String> e : entry) {
String k2 = e.getKey();
String v2 = e.getValue();
System.out.println(k2+"==>"+v2);
}
}
}
三 实际应用
public class HashMapDemo2 {
public static void main(String[] args) {
// 需求-->统计一个字符串中每个字符串出现的次数
String str = "AGSHAKJHJSDKJASHKDJHSADHSAJK";
// 字符:key String类型 次数:value Integer类型
// 声明Map集合
Map<String,Integer> map = new HashMap<>();
// 遍历字符串
for (int i = 0; i < str.length() ; i++) {
// 字符串可以看成一个字符数组 然后进行遍历
// 或者截取字符串获取字符串
String key = str.substring(i, i + 1);
// 进行判断(一般先判断否的)
// 如果不存在 k-->1
if (! map.containsKey(key)){
map.put(key,1);
}else{
// 如果存在 先取出k对应的v 然后v+1 再存入map中
Integer value = map.get(key);
value += 1; // value = value + 1(先装箱后拆箱)
map.put(key,value);
}
}
System.out.println(map);
}
}