Java集合之Map
Posted 陈彦斌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java集合之Map相关的知识,希望对你有一定的参考价值。
Map基础介绍
什么是map数据结构
- 底层就是一个数组结构,数组中的每一项又是一个链表,即数组和链表的结合体
- Table是数组,数组的元素时Entry
- Entry元素时一个key-value键值对,它持有一个指向下一个Entry元素的引用,table数组的每个entry元素同时也作为当前Entry链表的首节点,也指向了该链表的下一个Entry元素
常见的实现类
HashMap
- 一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射
- 是基于hashing的原理,使用put(key,value)存储对象到HashMap中,使用get(key)从HashMap中获取对象。当put()方法传递键和值时,会先对键调用hashCode()方法,计算并返回的hashCode是用于找到Map数组的bucket位置来存储Entry对象的,是非线程安全的,所以HashMap从操作速度很快
区别:乱序
TreeMap
- 在数据的存储过程中,能够自动对数据进行排序,实现了StoredMap接口,它是有序集合
- TreeMap使用的存储结构是平衡二叉树,也成为红黑树
- 默认排序规则:按照key的字典顺序来排序(升序),也可以自定义排序规则,要实现Comparator接口
区别:按一定规则排序
LinkedHashMap
区别:放入怎样顺序,打印怎样顺序
Map常用API
HashMap<String, String> map=new HashMap<String, String>(); //往map里面放key-value map.put("小陈", "上海"); map.put("小红", "深圳"); //根据key获取value String str=map.get("小陈"); System.out.println(str); //判断是否包含某个key Boolean flag=map.containsKey("小陈"); System.out.println(flag); //返回map的元素数量 int size=map.size(); System.out.println(size); map.put("小陈", "上海"); System.out.println(map.size()); Collection<String> values = map.values(); for(String s:values) { System.out.println(s); } Set<Entry<String, String>> entrySet = map.entrySet(); for(Map.Entry entry:entrySet) { System.out.println("key="+entry.getKey()+",value="+entry.getValue()); }
常见Map面试题(重要)
HashMap和TreeMap如何选择
- HashMap可实现快速存储和查询,但缺点是包含的元素是无序的,适合于在Map中插入、删除、查询
- TreeMap能便捷的实现对其内部元素的各种排序,但其一般性能(插入、删除、查询)比HashMap差,适用于自然顺序或自定义顺序遍历键(key)
jdk1.7和jdk1.8中的HashMap的主要区别
- 底层实现由“数组+链表”改为“数组+链表+红黑树”
什么时候开始转变
当链表节点较少时仍然是以链表存在,当链表节点较多时,默认是大于8时会转为红黑树
以上是关于Java集合之Map的主要内容,如果未能解决你的问题,请参考以下文章