Map集合:该集合存储键值对。一对一对往里存,而且要保证键的唯一性(一个键最多只能映射到一个值)。
1.添加
put(K key,V value)
putAll(Map<? extends K,? extends V>m)
2.删除
clear()
remove(Object key)
3.判断
containsKey(Object key)
containsValue(Object value)
isEmpty()
4.获取
get(Object key)
size()
values()
entrySet()
keySet()
Map
|--Hashtable:底层是哈希表数据结构,不可以存入null作为键或值。该集合是线程同步的。jdk1.0。效率低
|--HashMap:底层是哈希表数据结构。并允许使用null作为键或值。该集合是不同步的。jdk1.2。效率高
|--TreeMap:底层是二叉树数据结构。线程不同步,可以用于给Map集合中的键进行排序
其实Set底层就是使用了Map集合。
Map的共性方法:
import java.util.*; class MapDemo1{ public static void main(String[] args){ Map<String,String> map = new HashMap<String,String>(); //添加元素 System.out.println("put:"+map.put("01","zhangsan1"));//put方法是有返回值的 System.out.println("put:"+map.put("01","wangwu")); //当存入相同键的时候(“01”),新的值会替换老的值,而且put方法会把老的值返回来 map.put("02","zhangsan2"); map.put("03","zhangsan3"); System.out.println("containsKey"+map.containsKey("02")); System.out.println("remove"+map.remove("02")); //删除会返回该键所对应的值:zhangsan2 System.out.println("get"+map.get("02")); //获取也会返回该键所对应的值,若不存在,和删除一样,都会返回null map.put(null,"haha"); System.out.println("get:"+map.get(null)); //HashMap集合是可以让null作为键值存在的,但是开发中很少见 map.put("04",null); System.out.println("get:"+map.get("04")); //和上一句代码一样,null也可以作为键值存在,但更不常见 //获取Map集合中所有的值 Collection<String> coll = map.values(); System.out.println(coll); System.out.println(map); } }
重点说一下Map集合的两种取出方式:
1Set<k> keySet():将Map中所有的键存入到Set集合中。因为Set具备迭代器。所以可以通过迭代方式取出所有的键,再根据get方法,获取每一个键对应的值。
import java.util.*; class MapDemo2{ public static void main(String[] args){ Map<String,String> map = new HashMap<String,String>(); map.put("02","zhangsan2"); map.put("03","zhangsan3"); map.put("01","zhangsan1"); map.put("04","zhangsan4"); //先获取Map集合中的所有键的Set集合,keySet(); Set<String> keySet = map.keySet(); //有了Set集合,就可以获取其迭代器 Iterator<String> it = keySet.iterator(); while(it.hasNext()){ String key = it.next(); //有了键,就可以通过map集合的get方法获取其对应的值 String value = map.get(key); System.out.println("key:"+key+",value:"+value); } } }
Map集合的取出原理:将Map集合转成Set集合,再通过迭代器取出。
2.Set<Map.Entry<k,v>> entrySet():将Map集合中的映射关系存入到了Set集合中,而这个关系的数据类型就是Map.Entry
import java.util.*; class MapDemo2{ public static void main(String[] args){ Map<String,String> map = new HashMap<String,String>(); map.put("02","zhangsan2"); map.put("03","zhangsan3"); map.put("01","zhangsan1"); map.put("04","zhangsan4"); //将Map集合中的映射关系取出,存入到Set集合中 Set<Map.Entry<String,String>> entrySet = map.entrySet(); Iterator<Map.Entry<String,String>> it = entrySet.iterator(); while(it.hasNext()){ Map.Entry<String,String> me = it.next(); String key = me.getKey(); String value = me.getValue(); System.out.println(key+":"+value); } /* //先获取Map集合中的所有键的Set集合,keySet(); Set<String> keySet = map.keySet(); //有了Set集合,就可以获取其迭代器 Iterator<String> it = keySet.iterator(); while(it.hasNext()){ String key = it.next(); //有了键,就可以通过map集合的get方法获取其对应的值 String value = map.get(key); System.out.println("key:"+key+",value:"+value); } */ } }
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口