Map<K,V>
基本特点:该集合存储键/值对,一对对往里存。Key不能重复,一个Key只对应一个值。
- 添加:put(K key, V value);【如果添加相同的键,那么后添加的value会覆盖原有value,并返回原有value】 putAll(Map<? extends K, ? extends V> m);
- 删除:clear(); remove(Object key)
- 判断:containsValue(Object value); containsKey(Object key);isEmpty();
- 获取:get(Object key); size();values();【获取集合中的所有值】entrySet();keySet();
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是同步的。
|--HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是不同步的。
|--TreeMap:底层是二叉树数据结构,线程不同步。可以用于给map集合中的key进行排序。
(和Set很像,其实Set集合底层调用的就是Map集合)
Map的两种取出方式:
- Set<K> keySet():将Map中所有键存入Set集合,因为Set具备迭代器。可以用迭代器取出所有的键,再用get方法取出每一个键对应的值。
- Set<Map.Entry<K,V>> entrySet():将Map的映射关系取出,存入Set集合。(Map.Entry是接口Map的内部接口)
keySet取出方式示例:
import java.util.*;
class KeySetDemo
{
public static void main(String[] args)
{
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, "aaa");
m.put(2, "bbb");
m.put(3, "ccc");
m.put(4, "ddd");
Set<Integer> keySet = m.keySet(); //存放key的Set集合
Iterator<Integer> it = keySet.iterator(); //key的迭代器
while(it.hasNext())
{
Integer key = it.next();
String value = m.get(key); //通过key得到value
System.out.println(key + "=" + value);
}
}
}
entrySet取出方式示例:
import java.util.*;
class EntrySetDemo
{
public static void main(String[] args)
{
Map<Integer, String> m = new HashMap<Integer, String>();
m.put(1, "aaa");
m.put(2, "bbb");
m.put(3, "ccc");
m.put(4, "ddd");
Set<Map.Entry<Integer, String>> entrySet = m.entrySet(); //把key和value的关系Map.Entry存入Set,以便用迭代器取出
Iterator<Map.Entry<Integer, String>> it = entrySet.iterator(); //迭代器,存储Map.Entry<K,V>类型
while(it.hasNext())
{
Map.Entry<Integer, String> entry = it.next();
Integer key = entry.getKey(); //通过Map.Entry的getKey()方法得到key
String value = entry.getValue(); 通过Map.Entry的getValue()方法得到value
System.out.println(key + "=" + value);
}
}
}
对于HashMap的key,保证其唯一性方法和HashSet相同。
TreeMap可以自行想象。
Map扩展:
map集合被使用是因为具备映射关系。