集合体系之Map集合
##Map<K,V>( 接口 )
特点:将键映射到值对象,一个映射不能包含重复的键:每个键只能映射一个值
Map集合与Collection集合的区别
Map集合存储元素成对出现,其键唯一值可重复,为双列集合
Collection集合存储元素单独出现,其List子类的元素有序,可重复。其Set子类的元素唯一,为单列集合
注意:
Map集合的数据结构只与键有关,与值无关
Collection集合的数据结构针对元素有效
Map集合功能概述
添加功能
V put(K key,V value):将指定的值与此映射中的指定键关联(可选操作)。如果此映射以前包含一个
该键的映射关系,则用指定值替换旧值(当且仅当 m.containsKey(k) 返回 true 时,才能说映射 m
包含键 k 的映射关系)。
void putAll(Map<? extends K,? extends V> m):从指定映射中将所有映射关系复制到此映射中
(可选操作)。对于指定映射中的每个键 k 到值 v 的映射关系,此调用等效于对此映射调用一次
put(k, v)。如果正在进行此操作的同时修改了指定的映射,则此操作的行为是不确定的。
删除功能
void clear():从此映射中移除所有映射关系(可选操作)。此调用返回后,该映射将为空。
V remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
返回此映射中以前关联该键的值,如果此映射不包含该键的映射关系,则返回 null。
判断功能
boolean containsKey(Object key):如果此映射包含指定键的映射关系,则返回 true
boolean containsValue(Object value):如果此映射将一个或多个键映射到指定值,则返回 true。
boolean isEmpty():如果此映射未包含键-值映射关系,则返回 true。
获取功能
Set<Map.Entry<K,V>> entrySet():返回的是键值对对象集合
import java.util.HashMap; import java.util.Map; import java.util.Set; public class map_entrySet { public static void main(String[] args) { Map<Integer,Integer> m = new HashMap<>(); m.put(1,11); m.put(2,22); m.put(3,33); m.put(4,44); m.put(5,55); //返回一个Set集合,其存储类型为Map.Entry<Integer,Integer>接口 Set<Map.Entry<Integer,Integer>> ent = m.entrySet(); for (Map.Entry<Integer,Integer> ma : ent){ System.out.println(ma.getKey() + "---" + ma.getValue()); } } } out: 1---11 2---22 3---33 4---44 5---55
V get(Object key):返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
Set<K> keySet():获取集合中所有键的集合
Collection<V> values():获取集合中所有值的集合
长度功能
int size():返回集合中键值对的个数
HashMap<K,V>(类)
依赖于哈希表的Map借口实现,哈希表的作用是确保键的唯一性,
无特殊方法
LinkedHashMap<K,V>(类)
是Map接口的哈希表与链表实现,具有可预知的迭代顺序
TreeMap<K,V>(类)
是基于红黑树的Map接口实现。
使用同TreeSet
Hashtable<K,V>(类)
类似于HashMap<K,V>,在HashMap<K,V>出现之前,由于线程安全效率低,所以被HashMap<K,V>替代。
一些问题
Hashtable和HashMap区别
- Hashtable线程安全,效率低,不允许null键和null值
- HashMap:线程不安全,效率高,允许null键和null值
List,Set,Map等接口是否都继承Map接口
- List,Set不是继承自Map接口,它们继承自Collection接口
- Map本身就是一个顶层接口