From f1d9128962625affecbab2084d7a105af0fd205f Mon Sep 17 00:00:00 2001 From: haiqiang <43314997+Goose9527@users.noreply.github.com> Date: Sun, 10 Mar 2019 08:52:06 +0800 Subject: [PATCH] =?UTF-8?q?fix=20grow()=E6=96=B9=E6=B3=95=E6=8F=8F?= =?UTF-8?q?=E8=BF=B0=E4=B8=8D=E5=A4=9F=E4=B8=A5=E8=B0=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java相关/ArrayList-Grow.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Java相关/ArrayList-Grow.md b/Java相关/ArrayList-Grow.md index d763cb83..87c69519 100644 --- a/Java相关/ArrayList-Grow.md +++ b/Java相关/ArrayList-Grow.md @@ -145,7 +145,7 @@ } ``` -**int newCapacity = oldCapacity + (oldCapacity >> 1),所以 ArrayList 每次扩容之后容量都会变为原来的 1.5 倍!** 记清楚了!不是网上很多人说的 1.5 倍+1! +**int newCapacity = oldCapacity + (oldCapacity >> 1),所以在capacity是偶数的情况下,ArrayList 每次扩容之后容量都会变为原来的 1.5 倍,当capacity为奇数时(自己初始化容量时可能出现),第一次扩容容量变为oldCapacity + (oldCapacity - 1) / 2(在计算机运算的情况下减一除和直接除没有差别,对于整数会自动舍掉小数位),也就是说每次扩容相当于计算机中的1.5倍。 !** 记清楚了!不是网上很多人说的 1.5 倍+1!当然了,第一次扩容以后capacity会变为偶数,之后的每次扩容都会是原容量的1.5倍了。 > ">>"(移位运算符):>>1 右移一位相当于除2,右移n位相当于除以 2 的 n 次方。这里 oldCapacity 明显右移了1位所以相当于oldCapacity /2。对于大数据的2进制运算,位移运算符比那些普通运算符的运算要快很多,因为程序仅仅移动一下而已,不去计算,这样提高了效率,节省了资源