From cae4fe5d318866ff8cdb4641213a0f1724d8ab37 Mon Sep 17 00:00:00 2001 From: LaoK23 <58757853+laok23@users.noreply.github.com> Date: 2019年12月16日 17:47:56 +0800 Subject: [PATCH] LaoK homework of first week LaoK homework of first week --- ...46272円220円347円240円201円350円247円243円350円257円273円" | 14 ++++++++++++++ ...46272円220円347円240円201円350円247円243円350円257円273円" | 13 +++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 "week_01/49/ArrayList346円272円220円347円240円201円350円247円243円350円257円273円" create mode 100644 "week_01/49/HashMap346円272円220円347円240円201円350円247円243円350円257円273円" diff --git "a/week_01/49/ArrayList346円272円220円347円240円201円350円247円243円350円257円273円" "b/week_01/49/ArrayList346円272円220円347円240円201円350円247円243円350円257円273円" new file mode 100644 index 0000000..04d7714 --- /dev/null +++ "b/week_01/49/ArrayList346円272円220円347円240円201円350円247円243円350円257円273円" @@ -0,0 +1,14 @@ +1、ArrayList继承AbstractList类,实现List, RandomAccess, Cloneable(可克隆), Serializable(可序列化)等接口。 +2、ArrayList的属性解读: +1DEFAULT_CAPACITY:默认容量为10。 +2EMPTY_ELEMENTDATA和DEFAULTCAPACITY_EMPTY_ELEMENTDATA:默认情况下,这两个空数组实例长度都为0,区别在于在第一次添加元素后,DEFAULTCAPACITY_EMPTY_ELEMENTDATA会扩充为ArrayList +的默认容量10。 +3MAX_ARRAY_SIZE:要分配的ArrayList的最大长度为Integer的最大值-8,(Integer的最大值为2的31次方的结果-1)。这里为什么要减去8?是因为有些虚拟机要保存一下标题词,所以需要预留8个长度。 +4transient关键字:一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问;transient关键字只能修饰变量,而不能修饰方法和类; +一个静态变量不管是否被transient修饰,均不能被序列化。(一句话概括技术:将不需要序列化的属性前添加关键字transient)。 +3、ArrayList的方法解读: +1无参构造函数ArrayList():如果没有传入初始容量,则使用空数组DEFAULTCAPACITY_EMPTY_ELEMENTDATA,在添加第一个元素的时候会扩容到默认大小10 +2有参构造函数ArrayList(int initialCapacity):参数initialCapacity(初始容量),如果传入的初始容量大于0,就以这个初始容量为长度新创建一个数组; +如果传入的初始容量等于0,使用空数组EMPTY_ELEMENTDATA;如果传入的初始容量小于0,抛出异常。 +3扩容方法grow(int minCapacity):oldCapacity旧容量为数组的长度,newCapacity新容量为旧容量的1.5倍。 +如果发现新容量比需要的minCapacity容量还小,则以需要的minCapacity容量为准;如果新容量已经超过最大容量了,则使用最大容量;最后以新容量拷贝出来一个新数组。 diff --git "a/week_01/49/HashMap346円272円220円347円240円201円350円247円243円350円257円273円" "b/week_01/49/HashMap346円272円220円347円240円201円350円247円243円350円257円273円" new file mode 100644 index 0000000..ea1ad27 --- /dev/null +++ "b/week_01/49/HashMap346円272円220円347円240円201円350円247円243円350円257円273円" @@ -0,0 +1,13 @@ +1、HashMap继承AbstractMap类,实现Map, Cloneable, Serializable等接口。 +2、HashMap的属性解读: +1DEFAULT_INITIAL_CAPACITY:默认初始容量为16(1 << 4,1左移4位,相当于10000,2的4次方),在Java中,用位移的方式会比十进制效率更高。 +2MAXIMUM_CAPACITY:最大容量,2的30次方(1 << 30)。 +3DEFAULT_LOAD_FACTOR:默认负载因子(0.75f),构造函数没有带参数时指定的默认值。 +3、HashMap的方法解读: +1无参构造函数HashMap():假如没有入参,则构造一个带有默认初始容量(16)和默认负载因子(0.75f)的空HashMap。 +2构造函数HashMap(int initialCapacity, float loadFactor):假如initialCapacity初始容量小于0,抛出异常; +假如初始容量大于最大容量MAXIMUM_CAPACITY,则以最大容量为初始容量。假如负载因子小于0或者不是一个数字,抛出异常; +最后调用tableSizeFor(initialCapacity)方法计算HashMap的阈值threshold。 +3hash(Object key):返回一个哈希值。假如key为null,返回0;假如key不为null,则调用hashCode方法并去和(h>>> 16)异或,得到的结果才是争取的哈希值。 +至于为什么要和(h>>> 16)异或,还有待继续研究?(>>>是无符号右移) +4tableSizeFor(int cap)方法:返回大于输入参数且最近的2的整数次幂的数。不如cap为10,则返回的是16。