Map概述
Map接口是一个双列集合,它的每一个元素都包含一个键对象key和一个值对象value,键和值是一一对应关系。在map中访问元素时,只要找到指定的key就能找到对应的value。
HashMap集合
HashMap集合是Map接口的一个实现类,它是线程不安全的,用于存储键值映射关系,但保证不能出现相同的键。如果有相同的键,总结一句话:键相同,值覆盖。
实例:
public class Exception05 {
public static void main(String[] args) {
//创建一个map
Map hashMap = new HashMap();
//通过put(key, value)方法存储
hashMap.put("name1", "张一");
hashMap.put("name1", "李四");
hashMap.put("name2", "张二");
hashMap.put("name3", "张三");
hashMap.put("name4", "张四");
//通过get(key)方法取值输出
System.out.println("取出key为name1的value为:" + hashMap.get("name1"));
//map集合的遍历
for (Object entry : hashMap.entrySet()){
System.out.println(entry);
}
}
}
运行结果:
我们通过put()方法存入五个key和对应的value,有一个key是相同的,从结果可以看出来value等于张一的并没有输出打印。这就是键相同,值覆盖。
LinkedHashMap集合
从上面实例的运行结果可以看出,通过遍历map集合输出的结果并不是我们存入的顺序,如果想让遍历的结果输出和存储时的结果一致的话就要使用LinkedHashMap类它是HashMap的子类。它的内部也是使用了一个双向链表维护内部元素的关系。
实例:
public class Exception06 {
public static void main(String[] args) {
//创建LinkedHashMap集合
Map linkedHashMap = new LinkedHashMap();
//存储值
linkedHashMap.put("1","jack1");
linkedHashMap.put("2","jack2");
linkedHashMap.put("3","jack3");
//循环遍历输出
for (Object entry: linkedHashMap.entrySet()){
System.out.println(entry);
}
}
}
运行结果:
从运行结果可以看出元素迭代出来的顺序和存入的顺序是一致的。
TreeMap集合
TreeMap也是Map接口的一个实现类,该集合用来存储键值映射关系的,它是不允许出现重复的键,TreeMap集合是通过二叉树的原理来保证键的唯一性。
实例:
public class Exception07 {
public static void main(String[] args) {
Map treeMap = new TreeMap();//创建TreeMap集合
treeMap.put("1","张三");//存入三个值
treeMap.put("2","李四");
treeMap.put("3","王二");
Set keySet = treeMap.keySet();//获得键的集合
Iterator iterator = keySet.iterator();//获得iterator对象
while (iterator.hasNext()){
//判断是否存在下一个对象
Object key = iterator.next();//取出元素
Object value = treeMap.get(key);//根据获得的键找对应的key
System.out.println(key + "=" + value);
}
}
}
运行结果:
Properties集合
Properties类是Hashtable的一个实现类,而Hashtable是实现了Map接口。Hashtable和Hashmap十分相似,区别在于Hashtable是线程安全的,它在存取元素是速度很慢,现在基本不使用。但Hashtable有一个子类就是Properties,然而Properties在实际中应用非常重要,在实际开发中,经常使用Properties集合来存取应用的配置项。
加油吧!!!
下一次学习List和Map集合的遍历方式。