文章目录
前言
Map集合没有继承Collection接口,不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合,也有相应的许多方法。类似与函数,Map中不能包含相同的key,每个key只能映射一个value值,value值可以相同。Map集合是指Map接口以及Map接口的所有实现类。
一、Map接口
Map接口提供了将key映射到value值的对象。一个映射不能包含重复的key,每个key最多只能映射到一个value值。Map集合中允许值对象(value)是null,而且没有个数限制。
Map接口同样提供了集合的常用方法:
方法 | 功能描述 |
put(K key,V value) | 向集合中添加指定的key与value的映射关系的对象 |
containsKey(Object key) | 如果此映射包含指定key的映射关系,则返回ture值 |
containsValue(Object value) | 如果有一个或多个key映射到value值,则返回ture值 |
get(Object key) | 如果存在一个指定的key对象,则返回对应的value值,否则返回null值 |
keySet() | 返回该集合中的所有key对象形成一个Set集合 |
values() | 返回该集合中的所有值形成的Colllection集合 |
size() | 返回map集合元素长度int值 |
remove(Object key,Object values) | 删除该map集合中的指定元素 |
replace(Object key,Object values) | 替换该map元素中的指定元素 |
import java.util.*;
public class MapDemo {
public static void main(String[] args) {
//创建了一个Person类,构造方法为(String ID,String Name),getID(),getName()用于获取
People p1 = new People("101", "李三");
People p2 = new People("102", "李四");
People p3 = new People("103", "王五");
People p4 = new People("104", "赵六");
People p5 = new People("105", "黄七");
//以下为HashMap的代码
Map<String,String> map = new HashMap<>();
map.put(p5.getID(), p5.getName()).
map.put(p4.getID(), p4.getName());
map.put(p3.getID(), p3.getName());
map.put(p2.getID(), p2.getName());
map.put(p1.getID(), p1.getName());
//以上是对map集合存放数据
System.out.println("此map集合长度:"+map.size());
System.out.println("ID为105的人是否存在:"+map.containsKey("105"));
//使用keySet()方法把key存入Set集合,从而可以使用Set方法中的迭代器
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) { //遍历map集合元素
String id=(String)iterator.next();
System.out.println("id:"+id+" name:"+map.get(id));
}
}
}
运行结果:
二、Map接口的实现类
Map接口常用的实现类有HashMap和TreeMap。建议使用 HashMap类来实现Map集合。HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap是基于哈希表的Map接口的实现,HashMap通过哈希码对其内部的映射关系进行迅速查找;而TreeMap中的映射关系存在一定顺序,如果希望元素排列有序,应该用TreeMap实现Map集合。
1.HashMap类
HashMap类是基于哈希表的Map接口的实现。此实现提供所有可选的映射操纵。允许使用null值和null键,但必须保持键的唯一性。HashMap通过映射关系进行快速查找,但不保证各个元素的排放位置。(但是在Java 8之后,HashMap的内部实现进行了优化,使得它能够保持插入顺序。这意味着,当你遍历HashMap的时候,它会按照元素插入的顺序进行输出。)
HashMap类实现Map集合:
Map<> map = new HashMap<>();
实例:
public static void main(String[] args) {
People p1 = new People("101", "李三");
People p2 = new People("102", "李四");
People p4 = new People("104", "赵六");
People p5 = new People("105", "黄七");
People p3 = new People("103", "王五");
//以下为HashMap的代码
Map<String,String> map = new HashMap<>();
map.put(p4.getID(), p4.getName());
map.put(p3.getID(), p3.getName());
map.put(p2.getID(), p2.getName());
map.put(p1.getID(), p1.getName());
map.put(p5.getID(), p5.getName());
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String id = (String)iterator.next();
String name = (String)map.get(id);
System.out.println("id:"+id+" name:"+name);
}
}
输出结果:
2.TreeMap类
TreeMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射关系具有一定的顺序。但添加、删除和查找映射关系时,不如HashMap效率高。TreeMap不允许键对象为null。
TreeMap类实现Map接口:
Map<> map = new TreeMap<>();
实例:
import java.util.*;
public class MapDemo {
public static void main(String[] args) {
People p1 = new People("101", "李三");
People p2 = new People("102", "李四");
People p3 = new People("103", "王五");
People p4 = new People("104", "赵六");
People p5 = new People("105", "黄七");
//以下为HashMap的代码
Map<String,String> map = new TreeMap<>();
map.put(p4.getID(), p4.getName());
map.put(p3.getID(), p3.getName());
map.put(p2.getID(), p2.getName());
map.put(p1.getID(), p1.getName());
map.put(p5.getID(), p5.getName());
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while (iterator.hasNext()) {
String id = (String)iterator.next();
String name = (String)map.get(id);
System.out.println("id:"+id+" name:"+name);
}
}
}
运行结果:
总结
以上就是Map集合的相关介绍和简单使用,本文仅仅简单介绍了Map方法,而Map接口提供了大量能使我们快速便捷地处理键与值的函数和方法,有不足或文章错误的地方,欢迎在评论区中指正。