------- android培训、java培训、期待与您交流! ----------
day16
1、Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
Map与Collection的区别:
1,Map与Collection在集合框架中属于并列存在;
2,Map中存储的是键值对,存储元素使用put方法;Collection使用add方法。
3,Map集合没有直接取出元素的方法,而是先转成Set集合,再通过迭代获取元素。
4,Map集合中的键要保证唯一性。
Map常用方法:
1,添加。
put(K key, V value)
putAll(Map<? extends K,? extends V> m)
添加元素:如果添加时出现相同的键,那么后添加的值会覆盖原有键对应的值,并且put方法会返回被覆盖的值。
2,删除。clear() remove(Object key)
3,判断。
containsValue(Object value)
containsKey(Object key) isEmpty()
4,获取。get(Object key) size() values() :获取map集合中所有的值
可以通过get方法的返回值来判断一个键是否存在,通过返回null来判断。
entrySet()
keySet()
2、Map
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。jdk1.0,效率低。
|--HashMap:底层是哈希表数据结构,允许使用null键null值,该集合是不同步的。将Hashtable替代,jdk1.2,效率高。
|--TreeMap:底层是二叉树数据结构,线程不同步。可以给Map集合中的键进行排序。
Map和Set很像,其实Set底层就是使用了Map集合。
3、Map集合的两种取出方式: 参见MapDemo2.java
1,Set<k> keySet:将Map中所有的键存入到Set集合。因为Set具备迭代器,所以可以用迭代方式取出所有的键,再根据get方法获取每一个键对应的值。
Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。
//第一种取出方式 keySet
Set<Student> keySet = hm.keySet();
Iterator<Student> it = keySet.iterator();
while(it.hasNext())
{
Student stu = it.next();
String addr = hm.get(stu);
System.out.println(stu+".."+addr);
}
2,Set<Map.Entry<k,v>> entrySet:将Map集合中的映射关系存入到了Set集合中,而这个关系的数据类型就是:Map.Entry。
Entry其实就是Map中的一个static内部接口。为什么要定义在内部呢?
因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。
//第二种取出方式 entrySet
Set<Map.Entry<Student,String>> entrySet = hm.entrySet();
Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();
while(iter.hasNext())
{
Map.Entry<Student,String> me = iter.next();
Student stu = me.getKey();
String addr = me.getValue();
System.out.println(stu+"........."+addr);
}
参见 MapTest.java
4、什么时候使用map集合呢? 当数据之间存在着映射关系时,就可以使用map集合(map集合被使用是因为具备映射关系)。
5、map扩展知识,map中包含map,一对多的关系 。 参见MapDemo3.java