Map特点:该集合存储键值对。是一对一对往里存,而且要保证键的唯一性。
Map功能:
1,添加。
put(K,V)//如果添加时,有相同的键,那么后添加的值会覆盖原有键对应值。并put方法会返回被覆盖的值。
putAll(Map<? Extends K,? Extends V> t)
2,删除。
clear();
remove(k)
3,判断。
containsValue(Object value)
containsKey(Object key)
isEmpty();
get();//键值不存在返回null
4,获取。
get();
size():
values();//Map集合中所有的值
Set<k> keySet():将map中所有的键存入到Set集合。因为set具备迭代器。所以可以用迭代的方法取出所有的键,再根据get方法,获取每一个键对应的值。
Map<String,String> map = new HashMap<String,String>();
map.put("01","zs1");
Set<String> keySet = map.KeySet();//键值存入
Iterator<String> it = keySet.Iterator();
…
String value = map.get(key);
Map集合的取出原理:将map集合转换成set集合,再通过set集合器取出。
Set<Map.Entry<k,v>> entrySet():将map集合中的映射关系存入到了set集合中。而这个关系的数据类型是Map.Entry<K,V>。那么关系对象Map.Entry获取到后,就可以通过May,Entry中的getKey和getValue获取键和值。
Map<String,String> map = new HashMap<String,String>();
map.put("01","zs1");
Set<Map.Entry<String,String>> entrySet = map.entrySet();//关系存入
Iterator<Map.Entry<String,String>> it = entrySet.Iterator();//set迭代器
while(it.hasNext())
{
Map.Entry<String,String> me = it.next();
String key = me.getKey();
String value = me.getValue();
sop(key+value);
}
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。
interface Map
{
public static interface Entry//内部接口
{
public abstract Object getKey();
public abstract Object getValue();
}
}
class HashMap implements Map
{
class ha implements Map.Entry
{
public Object getKey(){}
public Object getValue(){}
}
}
注意:只有有了map集合才有关系,所以把Entry定义为内部接口,可直接访问内部数据!
Map子集合:
HashTable:底层是哈希表数据结构,不可以存入null键null值。线程同步。JDK1.0出现,效率低。
HashMap:底层是哈希表数据结构,允许存入null键null值。线程不同步。JDK1.2出现,效率高。
TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
Map和Set很像,其实Set底层就是Map。
什么时候使用map集合?当数据之间存在映射关系时,就要先想到map集合。
map可以有一对多的情况。一个学校对多个教室,一个教室对多个学生。 |
|