作者:葛妹秀 | 来源:互联网 | 2023-02-05 22:39
目录Map接口的特点代码实现代码实现Map的常用方法代码实现Map接口的4种遍历方法代码实现第一种方式第二种方式第三种方式第四种方式Map接口的特点1)Map
目录
Map接口的特点
代码实现
代码实现
Map的常用方法
代码实现
Map接口的4种遍历方法
代码实现
第一种方式
第二种方式
第三种方式
第四种方式
Map接口的特点
1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value
2)Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中
3)Map中的key不允许重复,原因和HashSet一样
4)Map中的value可以重复
5)Map的key可以为nul,value也可以为null,注意key为null,只能有一个,value为null,可以多个.
6)常用String类作为Map的key
7)key和value之间存在单向一对一关系,即通过指定的key总能找到对应的value
代码实现
@SuppressWarnings({"all"})
public class Map_ {public static void main(String[] args) {//map 接口实现类的特点,使用实现类HashMap//1.1)Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value(双列元素)//2.Map中的key和value可以是任何引用类型的数据,会封装到HashMap$Node对象中//3.Map中的key不允许重复,原因和HashSet一样//4.Map中的value可以重复//5.Map的key可以为nul,value也可以为null,注意key为null,只能有一个,value为null,可以多个.//6.常用String类作为Map的key//7.key和value之间存在单向一对一关系,即通过指定的key总能找到对应的valueMap map = new HashMap<>();map.put("no-1","浅辄");//k-vmap.put("no-2","余缶");//k-vmap.put("no-1","Lee");//当有相同的k,就等价于替换map.put("no-3","浅辄");map.put(null,null);map.put("no-4",null);System.out.println("mao="+map);//通过get方法,传入key,会返回对应的valueSystem.out.println(map.get("no-1"));}
}
8)Map存放数据的key-value示意图,一对k-v是放在一个Node中的,有因为Node实现了Entry接口,有些书上也说一对k-v就是一个Entry(如图)[代码演示]
![](https://img2.php1.cn/3cdc5/3b70/1c8/a3765bb454f49e30.png)
![](https://img2.php1.cn/3cdc5/3b70/1c8/af4399d3e2e9ebda.png)
代码实现
@SuppressWarnings({"all"})
public class MapSource_ {public static void main(String[] args) {Map map = new HashMap<>();map.put("no-1","浅辄");//k-vmap.put("no-2","余缶");//k-v//1.k-v最后是HashMap$Node = newNode(hash,key,value,null)//2.k-v为了方便程序员的遍历,还会创建EntrySet集合,该集合存放的元素的类型Entry,// 而一个Entry对象就有k,v EntrySet>即: transient Set> entrySet;//3.entrySet中,定义的类型是Map.Entry,但是实际上存放的还是HashMap$Node// 这是因为 HashMap$Node implements Map.Entry//4.当把HashMap$Node对象存放到entrySet就方便我们的遍历,因为 Map.Entry 提供了重要的方法// K getKey();V getValue();Set set = map.entrySet();System.out.println(set.getClass());//HashMap$EntrySetfor (Object obj : set) {//System.out.println(entry.getClass());//HashMap$Node//为了从HashMap$Node 取出 k-v//1.先做一个向下转型Map.Entry entry = (Map.Entry)obj;System.out.println(entry.getKey()+"-"+entry.getValue());}}
}
Map的常用方法
![](https://img2.php1.cn/3cdc5/3b70/1c8/28f03c371d42e5ce.png)
1)put:添加
2)remove:根据键删除映射关系
3)get:根据键获取值
4)size获取元素个数
5)isEmpty:判断个数是否为0
6)clear:清除
7)containsKey:查找键是否存在
代码实现
@SuppressWarnings({"all"})
public class MapMethod {public static void main(String[] args) {Map map = new HashMap();map.put("小黑子1号",new Book("",100));map.put("小黑子1号","鸡你太美");//替换map.put("小黑子2号","香精煎鱼食不食");map.put("小黑子3号","我测你们码");map.put("理塘丁真","我测你们码");map.put("小黑子4号",null);map.put(null,"我家哥哥下蛋你别吃");System.out.println("map="+map);//2)remove:根据键删除映射关系map.remove(null);System.out.println("map="+map);//3)get:根据键获取值Object val = map.get("理塘丁真");System.out.println("val="+val);//4)size获取元素个数System.out.println("k-y"+map.size());//5)isEmpty:判断个数是否为0System.out.println(map.isEmpty());//6)clear:清除map.clear();System.out.println("map="+map);//7)containsKey:查找键是否存在System.out.println(map.containsKey("王源"));}
}
class Book{private String name;private int num;public Book(String name, int num) {this.name = name;this.num = num;}
}
Map接口的4种遍历方法
1)containsKey:查找键是否存在
2)keySet:获取所有的键
3)entrySet:获取所有关系k-v
4)values:获取所有的值
代码实现
Map map = new HashMap();map.put("小黑子1号",new Book("",100));map.put("小黑子1号","鸡你太美");//替换map.put("小黑子2号","香精煎鱼食不食");map.put("小黑子3号","我测你们码");map.put("理塘丁真","我测你们码");map.put("小黑子4号",null);map.put(null,"我家哥哥下蛋你别吃");
第一种方式
//第一组:先取出所有的Key,通过Key 取出对应的valueSet keySet = map.keySet();//(1)增强forSystem.out.println("------第一种方式------");for(Object key: keySet){System.out.println(key+"-"+map.get(key));}
//(2) 迭代器System.out.println("------第二种方式------");Iterator iterator = keySet.iterator();while(iterator.hasNext()){Object key = iterator.next();System.out.println(key+"-"+map.get(key));}
第二种方式
//第二组:把所有values取出Collection values = map.values();//这里可以使用所有的Collections使用的遍历方法//(1)增强forSystem.out.println("------取出所有value------");for (Object value :values) {System.out.println(value);}
//(2)迭代器System.out.println("------取出所有value------");Iterator iterator1 = values.iterator();while (iterator.hasNext()){Object value = iterator1.next();System.out.println(value);}
第三种方式
//第三组:通过EntrySet 来获取key valueSet entrySet = map.entrySet();//(1)增强forSystem.out.println("------使用EnteySet 的 for增强------");for (Object entry: entrySet){//将entry 转成Map.EntryMap.Entry m = (Map.Entry) entry;System.out.println(m.getKey()+"-"+m.getValue());}
第四种方式
//(2)迭代器System.out.println("------使用EnteySet 的 迭代器------");Iterator iterator2 = entrySet.iterator();while (iterator2.hasNext()) {Object entry = iterator.next();//向下转型 Map.EntryMap.Entry m = (Map.Entry) entry;System.out.println(m.getKey()+"-"+m.getValue());}
写在最后:如果觉得小生写的不错,请点击一个关注,你们的点赞和关注就是我最大的动力