目录
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总能找到对应的value
Map map = new HashMap<>();
map.put("no-1","浅辄");//k-v
map.put("no-2","余缶");//k-v
map.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,会返回对应的value
System.out.println(map.get("no-1"));
}
}
8)Map存放数据的key-value示意图,一对k-v是放在一个Node中的,有因为Node实现了Entry接口,有些书上也说一对k-v就是一个Entry(如图)[代码演示]
代码实现
@SuppressWarnings({"all"})
public class MapSource_ {
public static void main(String[] args) {
Map map = new HashMap<>();
map.put("no-1","浅辄");//k-v
map.put("no-2","余缶");//k-v
//1.k-v最后是HashMap$Node = newNode(hash,key,value,null)
//2.k-v为了方便程序员的遍历,还会创建EntrySet集合,该集合存放的元素的类型Entry,
// 而一个Entry对象就有k,v EntrySet<Entry<K,V>>即: transient Set<Map.Entry<K,V>> 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$EntrySet
for (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的常用方法
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:判断个数是否为0
System.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 取出对应的value
Set keySet = map.keySet();
//(1)增强for
System.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)增强for
System.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 value
Set entrySet = map.entrySet();
//(1)增强for
System.out.println("------使用EnteySet 的 for增强------");
for (Object entry: entrySet){
//将entry 转成Map.Entry
Map.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.Entry
Map.Entry m = (Map.Entry) entry;
System.out.println(m.getKey()+"-"+m.getValue());
}
写在最后:如果觉得小生写的不错,请点击一个关注,你们的点赞和关注就是我最大的动力