java集合框架(三)——映射
来源:互联网 发布:js保存cookie到本地 编辑:程序博客网 时间:2024/05/22 11:41
Map
一、HashMap
1、实际上是一个“链表散列”,就是链表和数组的结合体,底层是一个数据结构(Entry<K,V>[] table),数组每一项是一个链表
transient Entry<K,V>[] table; static class Entry<K,V> implements Map.Entry<K,V> { final K key; V value; Entry<K,V> next;</span> int hash; /** * Creates new entry. */ Entry(int h, K k, V v, Entry<K,V> n) { value = v; next = n; key = k; hash = h; } public final K getKey() { return key; } public final V getValue() { return value; } ............. }
2、HashMap的性能参数
//默认初始容量,必须是2的倍数;
static final int DEFAULT_INITIAL_CAPACITY = 16;
//最大容量
static final int MAXIMUM_CAPACITY = 1 << 30;
//默认负载因子(HashMap中元素达到这个比例时,进行扩容)
static final float DEFAULT_LOAD_FACTOR = 0.75f;
//capacity * load factor 当容器中元素个数到达这个值时,进行扩容resize
int threshold;
//用户设定的负载因子
final float loadFactor;
//For fast-fail机制:HashMap(非线程安全的)的修改次数,iterator遍历时,检测这个值,有变化,抛出//ConcurrentModificationException
transient int modCount;
//map中存储数据的数组,HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry对象。
transient Entry<K,V>[] table;
a、负载因子衡量的是一个散列表的空间的使用程度,负载因子越大表示散列表的装填程度越高,反之愈小。
b、因此如果负载因子越大,对空间的利用更充分,然而后果是查找效率的降低;如果负载因子太小,那么散列表的数据将过于稀疏,对空间造成严重浪费。
c、默认的的负载因子0.75是对空间和时间效率的一个平衡选择。当容量超出此最大容量时,resize后的HashMap容量是容量的两倍。
3、HashMap的操作分析:
<1>、indexfor函数根据hash和length计算出元素位置,通过h&(length-1)返回,而length都是2的倍数,性能上的提高
<2>、hash增加高位运算
java8新增特性—lambda表达式
public static <K extends Comparable<? super K>, V> Comparator<Map.Entry<K,V>> comparingByKey() { return (Comparator<Map.Entry<K, V>> & Serializable) (c1, c2) -> c1.getKey().compareTo(c2.getKey()); }
二、TreeMap
基于红黑树实现,源码分析得其属性包括根节点、结点数、排序器、fail-fast属性(快速失败机制),共有13个内部类
构造函数有四种:1、空的使用键的自然顺序;2、提供排序器;3、提供参数,自然顺序;4、提供参数,提供排序器;
三、LinkedHashMap
扩展了HashMap,依元素插入的顺序维持元素的映射链表,linked提供双向链表
四、IdentityHashMap类、EnumMap类不详
- java集合框架(三)——映射
- Java基础—集合框架(三)
- 黑马程序员——Java之集合框架(三)
- Java基础——集合框架(三)
- 黑马程序员——JAVA基础----集合框架(三)
- Java集合框架(三)
- Java集合框架(三)
- Java 集合框架三
- 黑马程序员——Java集合框架复习总结(三)
- Java 集合框架源码分析(三)——HashMap
- Java 集合框架源码分析(三)——HashMap
- Java 集合框架源码分析(三)——HashMap
- Java 集合框架源码分析(三)——HashMap
- Java集合框架浅谈-List(三)
- JAVA集合框架面试题(三)
- 黑马程序员--Java集合框架(三)
- Java集合框架(三)day_17
- java集合框架总结(三)
- android studio 的aidl 文件创建步骤
- halcon 圆检测(识别圆、圆拟合)
- Android 小笔记 Uri获取绝对路径 、路径转Bitmap、获取屏幕截图
- RxJava 的使用详解(一)
- 新站不收录内页怎么办,加快新站内页收录的方法!
- java集合框架(三)——映射
- HDU 1846 巴什博奕(Bash Game)
- vxworks错误码解读
- ubantu 配置jdk tomcat xshell连接
- CodeForces798C Mike and gcd problem(思路)
- 排序模板:分数线划定
- Android Studio快速注释
- (带哨兵)直接插入排序
- Android studio (单元测试)