开发者学堂课程【Java高级编程:HashMap子类】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/20/detail/416
HashMap子类
HashMap 是 Map 接口之中最为常见的一个子类,该类的主要特点是无序存储,通过 Java 文档首先来观察一下 HashMap 子类的定义形式:
public class HashMap K.V>
extends AbstractMap K.V>
implements Map
<
K,V> , Cloneable,Serializable
该类的定义继承形式符合之前的集合定义形式,依然提供有抽象类并
且依然需要重复实现 Map 接口。
范例:观察 Map 集合的使用
package cn.mldn. demo;
import java.util.HashMap;
import java.util.Map;
public class JavaAPIDemo
{
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String,Integer>()
map.put ( "one",1) ;
map.put( "two",2) ;
map.put( "one",101) ;
//
key重复map.put( nu11, ) ;
//
key为nul
l
map.put( "zero", nul
l
) ;
//
value为null
system.out.print1n(map.get( "one" ) );
//
key存在
system.out.print1n(map.get(nu
ll
));
//
key存在
system.out.println(map.get(nul
l
));
//
key存在
}
}
以上的操作形式为 Map 集合使用的最标准的处理形式,通过代码可以发现,通过HashMap 实例化的 Map 接口可以针对 key 或 value 保存 null 的数据,
同时也可以发现即便保存数据的 kev 重复,那么也不会出现错误,而是出现内容的替换。
但是对于 Map 接口中提供的 put() 方法本身是提供有返回值的,那么返回值指的是在重复 key 的情况下返回旧得 value。
范例:观察 put() 方法
package cn.mldn. demo;
import java.util.HashMap;
import java.util.Map;
public class JavaAPIDemo
{
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<String,Integer>()
map.put ( "one",1) ;
map.put( "two",2) ;
map.put( "one",101) ;
//
key重复map.put( nu11, ) ;
//
key为nul
l
map.put( "zero", nul
l
) ;
//
value为null
system.out.print1n(map.get( "one" ) );
//
key存在
system.out.print1n(map.get(nu
ll
));
//
key存在
system.out.println(map.get(nul
l
));
//
key存在
}
}
在设置了相同的 key 的内容的时候 put() 方法会返回原始的数据内容。
清楚了 HashMap 的基本功能之后下面就需要来研究一下 HashMap 之中给出的源代码。
HashMap 之中肯定需要存储大量的数据,那么对于数据的存储
面试题:在进行 HashMap 的put() 操作的时候,如何实现容量扩充的?
在 HashMap 类里面提供有一个 “DEFAULT_INITIAL_CAPACITY” 常量,作为初始化的容量配置,而后这个常量的默认大小为 16 个元素,也就是说默认可以保存的最大内容是 16;
当保存的内容的容量超过了与个阈值(DEFAULT_LOAD_FACTOR = 0.75f), 相当于“容量*阈值=12”保存 12 个元素的时候就会进行容量的扩充;
在进行扩充的时候HashMap 采用的是成倍的扩充模式,即:每一次都扩充 ⒉倍容量