Map集合

​ Map集合是双列集合的顶级接口。

1. map集合的常用方法
// 1. 实例化一个Map接口实现类的对象,并向上转型
Map<String, String> map = new HashMap<>();

// 2. 增:向集合中添加一个键值对
//    HashMap、Hashtable、LinkedHashMap,底层实现都采用的哈希表存储的
//    将键,存入到一个哈希表中 ==> 键不允许重复,且键的存储顺序可能和添加顺序不一致
map.put("name", "xiaoming");
map.put("age", "10");
map.put("gender", "male");
// 3. 增:在HashMap中,不允许包含重复的键,如果键重复了,则会用新的值覆盖掉原来的值
map.put("age", "20");
System.out.println(value);

// 6. 删:通过一个键,删除一个键值对;返回被删除的这个键值对的值
// String value1 = map.remove("age1");
// System.out.println(value1);

// 7. 删:通过一个键值对进行删除,只有当键和值都能够匹配的时候,才进行删除
// boolean value2 = map.remove("age", "20");
// System.out.println(value2);

// 8. 删
// map.clear();

// 9. 改:将指定的键,对应的值,修改为指定的值
map.replace("age", "30");

// 10. 改:只有当key和oldValue匹配的时候,才会将值修改为newValue
map.replace("age1", "20", "200");


// 12. 查:通过键,获取值,如果值不存在,返回null
String value1 = map.get("age2");
System.out.println(value1);

// 13. 查:通过键,获取值,如果值不存在,返回 defaultValue
String value2 = map.getOrDefault("age2", "000");
System.out.println(value2);

// 14. 获取一个由所有的键组成的 Set集合
Set<String> keys = map.keySet();
// 15. 获取所有的值
Collection<String> values = map.values();

// 16. 判断一个map中是否包含指定的键
boolean contains = map.containsKey("age2");

// 17. 获取集合的长度(有多少键值对)
int size = map.size();


// 4. 增:从一个Map集合中,批量的添加键值对,类似于Collection中的addAll方法
// map.putAll();

// 11.
// map.replaceAll(BiFunction);

//修改,批量元素替换,
// 依次获取到集合中每一个键值对,键给k赋值,值给V赋值,使用返回值替换原来的值
map.replaceAll((k,v)->k+v);

// 5. 增:判断集合中是否存在这个键,如果存在,则不进行任何操作。如果不存在,则添加这个键值对。
//    返回值:如果这个键存在,返回这个键对应的值;如果这个键不存在,返回null
String value = map.putIfAbsent("age1", "30");
2. map集合遍历
//1,得到keySet集合遍历
private static void showMap1(Map<String,String> map){
Set<String> keySet = map.keySet();
for (String s : keySet) {
   System.out.println(s+" "+map.get(s));
   }
}

//2,使用forEach实现遍历map集合
private static void showMap2(Map<String,String> map){
	//BiConsumer,是一个函数式接口,接口中有一个方法,两个参数,没有返回值
	//这两个参数,K代表键值对中的键,v代表值
	map.forEach((k,v)->System.out.println(k+"=>"+v));
}

//使用增强for循环遍历
private static void showMap3(Map<String,String> map){
    //得到键值对的set集合
    Set<Map.Entry<String, String>> entries = map.entrySet();
    for (Map.Entry<String, String> entry : entries) {
       System.out.println(entry.getKey()+"=>"+entry.getValue());
       //entry里面有一个set方法,可以在循环的过程中对value进行修改
       if ("age".equals(entry.getKey()))
          entry.setValue("20");
    }
}
3. HashMap和Hashtable的区别
  1. HashMap是线程不安全的,Hashtable是线程安全的集合
  2. HashMap允许null键值,Hashtable不允许
  3. HashMap是jdk1.2推出的,Hashtable是jdk1.0推出的,后来有实现的map接口,且效率低于HashMap
  4. HashMap的父类是AbstractMap,Hashtable的父类是Dictionary
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值