黑马程序员07_map
Map
概述:
Map集合:映射关系 ,也有人称为字典,Map集合里存在两组值,一组是key,一组是value。Map里的key不允许重复。通过key总能找到唯一的value与之对应。该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
常用方法:
1、添加
put(K key, V value)
添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。
而且put方法会返回被覆盖的值。
System.out.println("put:"+map.put("01","zhangsan1"));//返回null
System.out.println("put:"+map.put("01","wnagwu"));//返回zhangsan1
putAll(Map<? extends K,? extends V> m)
2、删除。
clear()
remove(Object key) //根据键来删除
3、判断。
containsValue(Object value) //是否包括某个值
containsKey(Object key) //是否包括某个键
isEmpty()
4、获取。
get(Object key)
size()
values() //获取map集合中所有的值。Collection<String> coll = map.values()
entrySet()
keySet() //返回值为set集合
Map体系
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
和Set很像。
其实大家,Set底层就是使用了Map集合。
知识点一:map集合的两种取出方式
-
方式1、Set<k> keySet:
将map中所有的键存入到Set集合。因为set具备迭代器。所有可以迭代方式取出所有的键,在根据get方法。获取每一个键对应的值。
HashMap<String,String> m = new HashMap<String,String>(); m.put("001", "java001"); m.put("002", "java002"); m.put("003", "java003"); m.put("004", "java004"); m.put("005", "java005"); m.put("006", "java006"); System.out.println(m); Set<String> allKey = m.keySet();、 //将Map集合中的映射关系取出。存入到Set集合中。 Iterator<String> it = allKey.iterator(); while(it.hasNext()) { //有了键可以通过map集合的get方法获取其对应的值。 String key = it.next(); String value = m.get(key); System.out.println("key:"+key+",value:"+value); }
-
方式2、Set<Map.Entry<k,v>> entrySet:
将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.EntryEntry其实就是Map中的一个static内部接口。为什么要定义在内部呢?因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。
利用Map.Entry()方法,定义麻烦,方法简单。
Set<Map.Entry<String, String>> entrySet = m.entrySet(); Iterator<Map.Entry<String,String>> it = entrySet.iterator(); // 得到key和value的关系,该关系包含getKey和getValue方法 while(it.hasNext()) { Map.Entry<String,String> mm = it.next(); System.out.println(mm.getKey()); System.out.println(mm.getValue()); }
Map.Entry讲解
Entry也是一个接口,它是Map接口中的一个内部接口。具体代码如下:
interface Map //该接口可是实现获取键和值 { public static interface Entry { public abstract Object getKey(); public abstract Object getValue(); } } class HashMap implements Map { class Hahs implements Map.Entry { public Object getKey(){} public Object getValue(){} } }