解决方案 »

  1.   

    int newCapacity = oldCapacity + (oldCapacity >> 1)
    相当于int newCapacity = oldCapacity + (oldCapacity / 2)
    也就是说newCapacity = oldCapacity * (1.5)
    扩容50%的意思
      

  2.   

    int newCapacity = oldCapacity + (oldCapacity >> 1)
    newCapacity 就是扩容的新组数大小。而扩容的大小是根据原有旧数组大小来决定的。
    oldCapacity >>1。就是右移1位,这里会换算成二进制来进行。就是把十进制对应的数字换成二进制后往右边移一位。所以跟除以2差不多。所以扩容为原来的1.5倍。
    但是右移一位的时候,如果非偶数,也就是说二进制数的最低位为1,则会舍弃,就成为了除2-1。
    但是我好像记得ArrayList的扩容是直接用的(oldCapacity * 3)/2 + 1。你确定你没有看错。
      

  3.   

    楼上的都对。补充一点,对CPU而言,右移一位要比除2要快很多。