一、介绍
Map接口常用的实现类有HashMap和TreeMap。HashMap是基于哈希表的Map接口的实现,HashMap类实现的Map集合添加和删除映射关系效率更高。HashMap通过哈希码对其内部的映射关系进行快速查找。TreepMap中的映射关系存在一定的顺序,如果希望Map集合中的对象也存在一定的顺序,应该使用TreepMap类实现Map集合。
二、Map接口的实现类
1、HashMap类是基于哈希表的Map接口的实现,此实现提供所有可选的映射操作,并允许使用null值和null键,但必须保证键的唯一性。HashMap通过哈希表对其内部的映射关系进行快速查找。不保证映射的顺序,特别是它不保证该顺序恒久不变。
2、TreepMap类不仅实现了Map接口,还实现了java.util.SortedMap接口,因此,集合中的映射类关系具有一定的顺序。但在添加、删除和定位映射关系时,TreeMap类比HashMap类性能稍差。由于TreeMap类实现的Map集合中的映射关系是根据键对象按照一定的顺序排列的,因此不允许键对象是null。
注意:可以通过HashMap类创建Map集合,当需要顺序输出时,再创建一个完成相同映射关系的TreeMap类实例。
三、程序代码
先创建Emp类,代码如下:
public class Emp {
private String e_id;
private String e_name;
public Emp(String e_id,String e_name){
this.e_id=e_id;
this.e_name=e_name;
}
public String getE_id() {
return e_id;
}
public String getE_name() {
return e_name;
}
public void setE_id(String e_id) {
this.e_id = e_id;
}
public void setE_name(String e_name){
this.e_name=e_name;
}
public static void main(String[] args){
}
}
最后创建MapTest类,代码如下:
import java.util.*;
// 定义一个名为MapTest的公共类
public class MapTest {
// 主方法,程序的入口点
public static void main(String[] args) {
// 创建一个HashMap实现的Map对象,键和值都是String类型
Map<String, String> map = new HashMap<>();
// 创建Emp对象,假设Emp是一个包含员工ID和姓名的类
Emp emp1 = new Emp("351", "张三"); // 创建一个员工对象,ID为351,姓名为张三
Emp emp2 = new Emp("512", "里斯"); // 创建一个员工对象,ID为512,姓名为里斯
Emp emp3 = new Emp("853", "王二"); // 创建一个员工对象,ID为853,姓名为王二
Emp emp4 = new Emp("125", "赵二"); // 创建一个员工对象,ID为125,姓名为赵二
Emp emp5 = new Emp("341", "黄二"); // 创建一个员工对象,ID为341,姓名为黄二
// 将员工对象的ID作为键,姓名作为值,添加到HashMap中
map.put(emp4.getE_id(), emp4.getE_name());
map.put(emp1.getE_id(), emp1.getE_name());
map.put(emp2.getE_id(), emp2.getE_name());
map.put(emp3.getE_id(), emp3.getE_name());
map.put(emp5.getE_id(), emp5.getE_name());
// 获取Map集合中的键集合
Set<String> set = map.keySet();
// 获取键集合的迭代器
Iterator<String> it = set.iterator();
// 打印信息,说明这是使用HashMap实现的Map集合,无序
System.out.println("HashMap类实现的Map集合,无序:");
// 遍历Map集合,输出每个键和对应的值
while (it.hasNext()) {
String str = it.next(); // 获取下一个键
String name = map.get(str); // 根据键获取值
System.out.println(str + " " + name); // 输出键和值
}
// 创建一个TreeMap集合对象,TreeMap会根据键的自然顺序(或提供的Comparator)进行排序
TreeMap<String, String> treeMap = new TreeMap<>();
// 将HashMap中的所有键值对添加到TreeMap中
treeMap.putAll(map);
// 获取TreeMap键集合的迭代器
Iterator<String> tree = treeMap.keySet().iterator();
// 打印信息,说明这是使用TreeMap实现的Map集合,键对象升序
System.out.println("TreeMap类实现的Map集合,键对象升序:");
// 遍历TreeMap集合,输出每个键和对应的值
while (tree.hasNext()) {
String str = tree.next(); // 获取下一个键(已排序)
// 注意:这里应该使用treeMap.get(str)而不是map.get(str),虽然在这个例子中效果相同,
// 但为了代码的清晰性和正确性,最好使用treeMap来获取值,以体现我们正在操作的是TreeMap。
String name = treeMap.get(str); // 根据键获取值
System.out.println(str + " " + name); // 输出键和值
}
}
}