容器-Map接口、HashMap(十五)
-
Map接口:定义了双例集合对的存储特征,它并不是Collection接口的子接口。双例集合的存储特征以key与value结构为单位进行存储,体现的是数学中的y=f(x)概念。
-
Map和Collection的区别:
- Collection中的容器,元素是孤立存在的(理解为单身),向集合中存储元素采用一个元素的方式存储。
- Map中的容器,元素是成对存在的(理解为现代社会的夫妻),每个元素由键和值两部分组成,通过键可以找对所对应的值
- Collection中的容器称为单例集合,Map中的容器称为双例集合
- Map中的集合不能包含重复的键,值可以重复:每个键只能对应一个值。
- Map中常用的容器为HashMap、TreeMap等
-
HashMap的一些常用方法:
-
HashMap的一些常用方法的具体实现
-
添加元素
import java.util.HashMap; import java.util.Map; public class HashMapTest { public static void main(String[] args) { //实例化HashMap容器 Map<String,String> map=new HashMap<>(); //添加容器 map.put("a","A");//用put(K,V)添加元素,并且返回V的值,V为空时,返回的是null, String value=map.put("a","B");//K(键)相同时,新的V值会覆盖旧的V,返回的是被覆盖的旧的V System.out.println(value); } }
-
获取元素方式一,通过get方法获取元素。
//通过K获取value的方法 String val = map.get("a");//缺点:1.当HashMap有很多元素时,我们需要调用多次get方法 System.out.println(val);// 2.假如我们不知道有哪些K,通过get方法就无法获取 //优点:1.通过已知的Key来获取Value,get方法是很方便的
-
获取元素方式二,通过KeySet方法获取元素,可以解决get方法的两个缺点。
map.put("b","B"); map.put("c","D"); map.put("d","D"); map.put("e","E"); //获取HashMap容器中有的元素,可以使用KeySet方法与get方法一并完成 Set<String> keys=map.keySet();//KeySet方法获取所有的Key,放在一个Set集合里 for (String key:keys){//遍历所有的Key String v1=map.get(key);//通过get方法是通过每个Key,去获取Value System.out.println(key+"----"+v1);//在Map接口中,Key一定要不同,Value可以相同 }
-
获取元素方式三,通过entrySet方法获取Map.Entry类型获取元素。
//这个entrySet方法可以返回一个Set集合,Set所存放的类型是Map.Entry类型 //Map.Entry类型是:Entry接口继承Map,所以Entry是内部接口,Entry内部接口提供了两个方法,分别是getKey()、getValue() 获取K和V的值。Map外部接口调用Entry是内部接口的方法就要用Map.Entry //Map本身就是K-V的结构,而Entry类型就是一个K-V,entrySet方法返回的Set集合里就是存取多个K-V(键值对) Set<Map.Entry<String,String>> entrySet=map.entrySet(); for (Map.Entry<String,String> entry:entrySet){ String key=entry.getKey(); String v=entry.getValue(); System.out.println(key+"------------------"+v); }
-
并集操作
//并集操作 System.out.println("------------------------------"); Map<String,String> map2=new HashMap<>(); map2.put("f","F"); map2.put("c","cc");//当Key相同,value不同时,被并集的集合中的V,会覆盖并集的集合中的V map2.putAll(map);//map2去并集map //通过第二种keySet()方法获取元素 Set<String> keys2=map2.keySet(); for (String key:keys2){ System.out.println("Key: "+key+" Value: "+map2.get(key)); }
-
删除元素
//删除元素 System.out.println("-------------------------------"); String v=map.remove("e");//remove()通过Key删除Value值 System.out.println(v);//返回删除的Value值 Set<String> keys3=map.keySet(); for (String key:keys3){ System.out.println("Key: "+key+" Value "+map.get(key)); }
-
判断Key是否存在
boolean flag = map.containsKey("a"); System.out.println(flag);
-
判断Value是否存在
boolean flag2 = map.containsValue("BB"); System.out.println(flag2);
-