一、Map接口简介
Map接口是一种双列集合,它的每个元素都包含一个键对象Key和值对象Value,键和值对象之间存在一种对应关系,称为映射。从Map集合中访问元素时,只要指定了Key,就能找到对应的Value。
Map接口中的常用方法:
- void put(Object key, Object value) 将指定的值与此映射中的指定键关联
- Object get(Object key) 返回指定键所映射的值
- void clear() 删除所有的键值对元素
- V remove(Object key) 根据键删除对应的值,返回被删除的值
- int size() 返回集合中键值对的个数
- boolean containsKey(Object key) 判断该映射是否包含指定键的映射关系
- boolean containsValue(Object value) 判断该映射是否将一个或多个键映射到指定值
- Set keySet() 返回此映射中包含的键的Set视图
- Collection<V> values() 返回此映射中包含的值得Collection视图
- Set<Map.Entry<K, V>>entrySet() 返回此映射中包含的映射关系的Set视图
二、HashMap集合
HashMap集合是Map接口的一个实现类,用于存储键值映射关系,但HashMap集合没有重复的键且键值无序,若为同一个键重复赋值,那么后面的赋值会覆盖前面的赋值。
创建Map对象:HashMap map = new HashMap();
存储键和值:map.put("key", "value");
根据键获取值:map.get("key");
返回集合大小:map.size();
判断是否包含传入的键:map.containsKey("key");
判断是否包含传入的值:map.containsValue("value");
根据键删除值:map.remove("key");
获取每个键所对应的值:map.get(key);
如果想让集合中元素传入和传出顺序一致的话,可以使用LinkedHashMap类,它是HashMap的子类,类似于LinkedList,也是使用双向链表来维护内部元素的关系。
举个例子:
import java.util.*;
public class eg4HashMap {
public static void main(String[] args){
HashMap map = new HashMap(); //创建Map对象
map.put("1","张三"); //存储见和值
map.put("2","李四");
map.put("3","王五");
System.out.println("直接输出Map对象:" + map + "\n先遍历Map集合中所有的键:");
//先遍历Map集合中所有的键,再根据键获取相应的值
Set keySet = map.keySet(); //获取键的集合
Iterator it = keySet.iterator(); //迭代键的集合
while(it.hasNext()){
Object key = it.next();
Object value = map.get(key); //通过键获取对应的值
System.out.println(key + ":" + value);
}
//先获取集合中的所有映射关系,然后从映射关系中取出键和值
System.out.println("先获取集合中的所有映射关系:");
Set entrySet = map.entrySet(); //获取映射关系的集合
Iterator iterator = entrySet.iterator(); //迭代映射关系的集合
while (iterator.hasNext()){
Map.Entry entry = (Map.Entry)(iterator.next()); //获取集合中键值对映射关系
Object key = entry.getKey();
Object value = entry.getValue();
System.out.println(key + ":" + value);
}
}
}
三、TreeMap集合
TreeMap集合是Map接口的一个实现类,它可以对集合中的元素的键值进行排序。
创建Map集合:TreeMap map = new TreeMap();
TreeMap集合之所以可以对添加的元素的键值进行排序,其实现同TreeSet一样,TreeMap的排序也分为自然排序和比较排序两种。比较排序时,类需要实现comparator接口,并重写compare()方法。
四、HashTable集合
Map接口中还有一个实现类HashTale,它与HashMap十分相似,区别在于HashTable是线程安全的,不过HashTable存取元素时速度很慢,目前基本上被HashMap所取代,但HashTable的子类Properties在实际应用中十分重要,它主要用来存储字符串类型的键和值,在实际开发中经常使用Priperties集合来存取应用的配置项。
创建Properties对象:Properties p = new Properties();
设置键值对:p.setProperty("key", "value");
获取键值对:p.getProperty(key);