Map体系结构:
与set的区别:Set底层是使用了map集合(value为null值) ; 所以HashMap和TreeMap底层可以看Set 底层是多少
公共方法:
添加
- put(K key,V value) ; //如果出现相同的键,会覆盖原有的键的值
- putAll(Map<? extend K,?Extend V> m)
删除
- clear()
- remove(Object key) //移除key对应的键值对
判断
- containsValue(Object value)
- containsValue(Object key)
- isEmpty()
获取
- get(object value) //返回key对应的value
- size()
- values() //返回该map中的value的集合
- keySet() //将map中所有的键存入到set集合 ; 因为set具备迭代器,所以可以使用迭代器取出所有的值 ; 再根据get方法,获取每一个键对应的值 ;
- entrySet() //返回此映射中包含的映射关系的set视图,该映射关系的数据类型就是Map.Entry<K,V> ,遍历出映射关系后,再调用getKey(),getValue()从该映射关系取出
HashMap:
原理:类似HashSet ; 允许存入null键null值 ; 线程不同步
LinkedHashMap:
特点:其需要维护元素的插入顺序,所以性能略低于HashMap ; 但是迭代访问时效率较高
TreeMap:
原理:类似TreeSet ,是一个红黑树数据结构 ; 是对key节点进行排序的 ;
排序的实现,类似TreeSet
HashTable:
原理:底层是hash表 ; 不能存入null键null值 ;
Map的遍历:
方式1:使用keySet()
Map<String,String> map = new HashMap<>(); map.put("01","111"); map.put("02","222"); map.put("03","333"); //迭代方式1: 使用 keySet() //先获取map集合的所有键的set集合 keySet() Set<String> keySet = map.keySet(); Iterator<String> it = keySet.iterator(); while(it.hasNext()){ String key = it.next(); String value = map.get(key); System.out.println("key:"+key+":"+ "value:"+value); }
方式2:使用entrySet()
Map<String,String> map = new HashMap<>(); map.put("01","111"); map.put("02","222"); map.put("03","333"); //迭代方式2: 使用 entrySet() 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); }