一、Map类的介绍
Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。
1.1:构造函数定义和方法
1. Map提供接口分别用于返回 键集、值集或键-值映射关系集。entrySet()用于返回键-值集的Set集合;keySet()用于返回键集的Set集合;values()用户返回值集的Collection集合,因为Map中不能包含重复的键;每个键最多只能映射到一个值。所以,键-值集、键集都是Set,值集时Collection。
2. Map提供了“键-值对”、“根据键获取值”、“删除键”、“获取容量大小”等方法。
构造函数定义
public interface Map<K,V> { }
方法
abstract void clear()
abstract boolean containsKey(Object key)
abstract boolean containsValue(Object value)
abstract Set<Entry<K, V>> entrySet()
abstract boolean equals(Object object)
abstract V get(Object key)
abstract int hashCode()
abstract boolean isEmpty()
abstract Set<K> keySet()
abstract V put(K key, V value)
abstract void putAll(Map<? extends K, ? extends V> map)
abstract V remove(Object key)
abstract int size()
abstract Collection<V> values()
1.2:Map的架构图
借鉴【野生开发者】的一篇文章:
Java集合框架——Map_java集合结构图-CSDN博客
如上图:
(01) Map 是映射接口,Map中存储的内容是键值对(key-value)。
(02) AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API。其它Map的实现类可以通过继承AbstractMap来减少重复编码。
(03) SortedMap 是继承于Map的接口。SortedMap中的内容是排序的键值对,排序的方法是通过比较器(Comparator)。
(04) NavigableMap 是继承于SortedMap的接口。相比于SortedMap,NavigableMap有一系列的导航方法;如"获取大于/等于某对象的键值对"、“获取小于/等于某对象的键值对”等等。
(05) TreeMap 继承于AbstractMap,且实现了NavigableMap接口;因此,TreeMap中的内容是“有序的键值对”!
(06) HashMap 继承于AbstractMap,但没实现NavigableMap接口;因此,HashMap的内容是“键值对,但不保证次序”!
(07) Hashtable 虽然不是继承于AbstractMap,但它继承于Dictionary(Dictionary也是键值对的接口),而且也实现Map接口;因此,Hashtable的内容也是“键值对,也不保证次序”。但和HashMap相比,Hashtable是线程安全的,而且它支持通过Enumeration去遍历。
(08) WeakHashMap 继承于AbstractMap。它和HashMap的键类型不同,WeakHashMap的键是“弱键”。
1.3:总结
1. Map 是一个键值对(key-value)映射接口。Map映射中不能包含重复的键;每个键最多只能映射到一个值。
2. Map 接口提供三种collection 视图,允许以键集、值集或键-值映射关系集的形式查看某个映射的内容。
3. Map 映射顺序。有些实现类,可以明确保证其顺序,如 TreeMap;另一些映射实现则不保证顺序,如 HashMap 类。
4. Map 的实现类应该提供2个“标准的”构造方法:第一个,void(无参数)构造方法,用于创建空映射;第二个,带有单个 Map 类型参数的构造方法,用于创建一个与其参数具有相同键-值映射关系的新映射。实际上,后一个构造方法允许用户复制任意映射,生成所需类的一个等价映射。尽管无法强制执行此建议(因为接口不能包含构造方法),但是 JDK 中所有通用的映射实现都遵从它。
二、Map.get() 获取集合value数据
Map获取结合的value数据使用get方法.
定义
get(Object key) 返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null
例子
/**
*
* Map获取集合value数据
*
*/
public class MapDemo
{
public static void main(String[] args)
{
Map<String,Integer> m = new HashMap<String,Integer>();
m.put("zhangsan", 19);
m.put("lisi", 49);
m.put("wangwu", 19);
m.put("lisi",20);
m.put("hanmeimei", null);
System.out.println(m);
System.out.println(m.get("lisi"));
}
}
三、Map.size() 获取集合总条数
Map获取集合总条数使用remove方法.
定义
size() 返回此映射中的键-值映射关系数。
例子
/**
*
* Map获取集合总条数
*
*/
public class MapDemo
{
public static void main(String[] args)
{
Map<String,Integer> m = new HashMap<String,Integer>();
m.put("zhangsan", 19);
m.put("lisi", 49);
m.put("wangwu", 19);
m.put("lisi",20);
m.put("hanmeimei", null);
System.out.println(m);
System.out.println(m.size());
}
}
四、Map.values() 获取集合所有value值
Map获取集合所有value值使用values方法.
定义
values() 返回此映射中包含的值的 collection 视图
例子
/**
*
* Map获取集合所有value值
*
*/
public class MapDemo
{
public static void main(String[] args)
{
Map<String,Integer> m = new HashMap<String,Integer>();
m.put("zhangsan", 19);
m.put("lisi", 49);
m.put("wangwu", 19);
m.put("lisi",20);
m.put("hanmeimei", null);
System.out.println(m);
System.out.println(m.values());
}
}
五、Map.entrySet() 集合映射成set视图
Map集合映射成set视图使用entrySet方法.
定义
entrySet() 返回此映射中包含的映射关系的 set 视图。
例子
/**
*
* Map集合映射成set视图
*
*/
public class MapDemo
{
public static void main(String[] args)
{
Map<String,Integer> m = new HashMap<String,Integer>();
m.put("zhangsan", 19);
m.put("lisi", 49);
m.put("wangwu", 19);
m.put("lisi",20);
m.put("hanmeimei", null);
System.out.println(m);
System.out.println(m.entrySet());
}
}
六、Map.keySet() 集合映射成key视图
Map集合映射成key视图使用keySet方法.
定义
keySet() 返回此映射中包含的映射关系的 key 视图。
例子
/**
*
* Map集合映射成key视图
*
*/
public class MapDemo
{
public static void main(String[] args)
{
Map<String,Integer> m = new HashMap<String,Integer>();
m.put("zhangsan", 19);
m.put("lisi", 49);
m.put("wangwu", 19);
m.put("lisi",20);
m.put("hanmeimei", null);
System.out.println(m);
System.out.println(m.keySet());
}
}