一、目录
- Map接口基本介绍
- Map接口常用方法
- Map接口遍历方式
针对JDK8中Map接口的特点
- Map与Collection并列存在。用于保存具有映射关系的数据:Key-Value。
- Map中的Key和Value可以是任何引用类型的数据,会封装到HashMap$Node对象中。
- Map中的Key不允许重复,原因和HashSet一样。并且如果加入相同的Key,那么Value值将被后加入的替换掉。
- Map中的Value值可以重复。
- Map的Key可以为null,value也可以为null。但是只能有一个key为null。
- 常用String类作为Map的Key。
- Key和Value之间存在单向一对一关系,即通过指定的Key总能找到对应的Value。
- Map存放数据的
package com.javamap;
import java.util.HashMap;
public class JavaMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1", "Lilei");
hashMap.put("no2", "LiPing");
hashMap.put(null, null);
System.out.println(hashMap);
System.out.println(hashMap.get(null));
}
}
output:
{no2=LiPing, null=null, no1=Lilei}
null
三、Map接口常用方法
- put:添加。
- remove:根据键值删除映射关系。
- get:根据键值获取值。
- size:获取元素个数。
- isEmpty:判断个数是否为0。
- clear:清除。
- containsKey:查找键是否存在。
package com.javamap;
import java.util.HashMap;
public class JavaMap {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1", "Lilei");
hashMap.put("no2", "LiPing");
hashMap.put(null, null);
hashMap.put("no3", new Book("yyyy", 100));
System.out.println(hashMap);
System.out.println(hashMap.get(null));
hashMap.remove(null);
System.out.println(hashMap);
System.out.println(hashMap.size());
System.out.println(hashMap.isEmpty());
System.out.println(hashMap.containsKey("no2"));
hashMap.clear();
System.out.println(hashMap);
}
}
class Book{
private String bookname;
private double price;
public Book(String bookname, double price) {
this.bookname = bookname;
this.price = price;
}
}
output:
{no2=LiPing, null=null, no1=Lilei, no3=com.javamap.Book@1b6d3586}
null
{no2=LiPing, no1=Lilei, no3=com.javamap.Book@1b6d3586}
3
false
true
{}
四、Map接口遍历方式
先来看一下遍历的时候涉及到的方法:
- containsKey:查找键是否存在。
- keySet:获取所有的键。
- entrySet:获取所有的关系。
- values:获取所有的值。
- 一、先取出所有的Key,再通过Key以增强for循环或者迭代器的方式取出对应的Value。
增强for循环:
package com.javamap;
import java.util.HashMap;
import java.util.Set;
public class JavaMapIter {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1", "Lilei");
hashMap.put("no2", "LiPing");
hashMap.put("no3", "Zhang");
hashMap.put("no4", "Zhao");
Set set = hashMap.keySet();
for (Object key : set) {
System.out.println(key + " " + hashMap.get(key));
}
}
}
output:
no2 LiPing
no1 Lilei
no4 Zhao
no3 Zhang
迭代器:
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next + " " + hashMap.get(next));
}
- 二、如果不需要Key,仅仅需要Value。那么直接通过values()方法将所有Value取出,然后再用Collections的所有遍历方式都可。
Collection values = hashMap.values();
//增强for循环
for (Object value : values) {
System.out.println(value);
}
//迭代器
Iterator iterator = values.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
System.out.println(next);
}
- 三、通过EntrySet来获取Key-Value。
tips: 在获取到entrySet之后,需要将其转成Map.Entry,因为它提供了getkey()和getvalue()方法,这样就可以获取到Key 和Value了。
package com.javamap;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
public class JavaMapIter {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1", "Lilei");
hashMap.put("no2", "LiPing");
hashMap.put("no3", "Zhang");
hashMap.put("no4", "Zhao");
package com.javamap;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class JavaMapIter {
public static void main(String[] args) {
HashMap hashMap = new HashMap();
hashMap.put("no1", "Lilei");
hashMap.put("no2", "LiPing");
hashMap.put("no3", "Zhang");
hashMap.put("no4", "Zhao");
Set set = hashMap.entrySet();
for (Object o : set) {
Map.Entry oe = (Map.Entry) o;
System.out.println(oe.getKey() + " " + oe.getValue());
}
}
}
}
}
output:
no2 LiPing
no1 Lilei
no4 Zhao
no3 Zhang