Java集合类总结3——Map
来源:互联网 发布:空气质量检测仪 知乎 编辑:程序博客网 时间:2024/06/07 16:23
Map接口
Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
一、HashMap类
1、定义:
publicclassHashMap<K,V>
extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable
2、构造函数
HashMap提供了三个构造函数:
HashMap():构造一个具有默认初始容量(16)和默认加载因子(0.75)的空HashMap。
HashMap(intinitialCapacity):构造一个带指定初始容量和默认加载因子(0.75)的空HashMap。
HashMap(intinitialCapacity, float loadFactor):构造一个带指定初始容量和加载因子的空HashMap。
HashMap的实例有两个参数影响其性能:“初始容量”和“加载因子”。容量是哈希表中桶的数量,初始容量默认值为16。加载因子是哈希表在其容量自动增加之前可以达到多满的一种尺度。当哈希表中的条目数超出了加载因子与当前容量的乘积时,则要对该哈希表进行rehash操作(即重建内部数据结构,新建一个更大尺寸的hash表,然后把数据从老的Hash表中迁移到新的Hash表中),从而哈希表将具有大约两倍的桶数。
对于使用链表法的散列表来说,查找一个元素的平均时间是O(1+a),因此如果负载因子越大,对空间的利用更充分,然而后果是查找效率的降低;如果负载因子太小,那么散列表的数据将过于稀疏,对空间造成严重浪费。系统默认负载因子为0.75,一般情况下我们是无需修改的。
3、数据结构
Java中最常用的两种结构是数组和模拟指针(引用),几乎所有的数据结构都可以利用这两种来组合实现
HashMap底层实现还是数组,只是数组的每一项都是Entry节点。
staticclassEntry<K,V>implementsMap.Entry<K,V>{
final K key; V value; Entry<K,V> next; final int hash; /** * Creates new entry. */ Entry(int h, K k, V v, Entry<K,V> n) { value = v; next = n; key = k; hash = h; } ....... }
Entry为HashMap的内部类,它包含了键key、值value、下一个节点next,以及hash值,这是非常重要的,正是由于Entry才构成了table数组的单项链表。
2、WeakHashMap类
WeakHashMap是一种改进的HashMap,它对key实行“弱引用”,如果一个key不再被外部所引用,那么该key可以被GC回收。
3、Hashtable类
Hashtable继承Map接口,实现一个key-value映射的哈希表。任何非空(non-null)的对象都可作为key或者value,Hashtable是同步的。HashMap是非同步的,并且允许null,即nullvalue和nullkey,添加数据无序。
添加数据使用put(key,value),取出数据使用get(key),这两个基本操作的时间开销为常数。
Hashtable通过initialcapacity和loadfactor两个参数调整性能。通常缺省的loadfactor 0.75较好地实现了时间和空间的均衡。增大loadfactor可以节省空间但相应的查找时间将增大,这会影响像get和put这样的操作。
- Java集合类总结3——Map
- JAVA----集合类——Map集合
- Java集合—Map集合
- java集合------Map集合总结
- Java集合体系总结—Map、Set、List、Queue
- java 集合类——Map、List
- java—面向对象集合类Map
- Java集合类框架—Map
- Java集合类—List,Set,Map
- java集合3——Map集合的基础知识
- java集合(五)——集合 Map
- Java集合框架—Map
- Java知识总结-Map集合
- java集合框架---Map总结
- java中Map集合总结
- java集合14--Map总结
- java集合14--Map总结
- Java集合1-Map总结
- C#之隐式与显示类型转换
- 优先队列的重载应用(初学)
- android运行时权限的管理
- vs2017 xamarin开发android 导入重复jar 无法编译
- 【Mybatis从0到1-003】mybatis框架及简单入门程序
- Java集合类总结3——Map
- java 之JSplitPane
- 【实用手记】如何在当前终端打开一个相同路径的终端
- 安装Apache Tomcat Connector(mod_jk)
- vue的官方脚手架vue-cli到底做了什么?(vue-cli webpack配置详解)
- 输入框自动补全功能
- android:contentDescription
- Go语言入门教程(一)Linux下安装Go
- UVa1584 环状序列 (Circular Sequence)