ArrayList源码中的数组扩容的疑问 arraylist源码java 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 int newCapacity = oldCapacity + (oldCapacity >> 1)相当于int newCapacity = oldCapacity + (oldCapacity / 2)也就是说newCapacity = oldCapacity * (1.5)扩容50%的意思 int newCapacity = oldCapacity + (oldCapacity >> 1)newCapacity 就是扩容的新组数大小。而扩容的大小是根据原有旧数组大小来决定的。oldCapacity >>1。就是右移1位,这里会换算成二进制来进行。就是把十进制对应的数字换成二进制后往右边移一位。所以跟除以2差不多。所以扩容为原来的1.5倍。但是右移一位的时候,如果非偶数,也就是说二进制数的最低位为1,则会舍弃,就成为了除2-1。但是我好像记得ArrayList的扩容是直接用的(oldCapacity * 3)/2 + 1。你确定你没有看错。 楼上的都对。补充一点,对CPU而言,右移一位要比除2要快很多。 新手求助。不规则数组 请问JAVA连接数据库为什么要配置数据源,有什么好处? JDialogue的问题 hibernate update 问题,郁闷 简单问题,没分了 使用Applet出现下述错误,是怎么回事?(在用户那发现,本地难再现) 在网络中用java实现文件的点对点传送(求助) 为什么我的程序本地可以运行而通过JNLP确报错呢? 各位高手帮忙!关于从jar文件中读文件的问题? Java如何获得当前程序的CPU、内存使用情况? 新人求解Java面向对象,Java牛的速进! StringBuilder会发生死锁?
相当于int newCapacity = oldCapacity + (oldCapacity / 2)
也就是说newCapacity = oldCapacity * (1.5)
扩容50%的意思
newCapacity 就是扩容的新组数大小。而扩容的大小是根据原有旧数组大小来决定的。
oldCapacity >>1。就是右移1位,这里会换算成二进制来进行。就是把十进制对应的数字换成二进制后往右边移一位。所以跟除以2差不多。所以扩容为原来的1.5倍。
但是右移一位的时候,如果非偶数,也就是说二进制数的最低位为1,则会舍弃,就成为了除2-1。
但是我好像记得ArrayList的扩容是直接用的(oldCapacity * 3)/2 + 1。你确定你没有看错。