These comparisons are essential to the working of Martin's algorithm.  I
found them interesting as well, but notice that when the capacity overflows
these comparisons will always be false.  That is to say:

oldCapacity < minCapacity (given, otherwise we would not be resizing)
therefore oldCapacity + (0.5 for ArrayList, else 1) * oldCapacity -
minCapacity < oldCapacity

So if oldCapacity + (0.5 for ArrayList, else 1) * oldCapacity >
Integer.MAX_VALUE, subtracting minCapacity re-overflows back into the
positive number realm.

That being said, and this is a question/comment to all, I want to point out
that this type of code assumes a particular class of orderly overflow
behavior.  Is this specified in the Java spec, or will this break on an
obscure machine that does not use, say, two's complement arithmetic?

Regards,

Kevin

2010/3/9 Dmytro Sheyko <dmytro_she...@hotmail.com>

>  Is there any reason to use comparison like this
>
> if (newCapacity - minCapacity < 0)
>
> if (newCapacity - MAX_ARRAY_SIZE > 0) {
>
> instead of
>
> if (newCapacity < minCapacity)
>
> if (newCapacity > MAX_ARRAY_SIZE) {
>
> Thanks,
> Dmytro
>
> > Date: Mon, 8 Mar 2010 18:10:37 -0800
> > Subject: Re: Bugs in java.util.ArrayList, java.util.Hashtable and
> java.io.ByteArrayOutputStream
> > From: marti...@google.com
> > To: kevin.l.st...@gmail.com; christopher.hega...@sun.com;
> alan.bate...@sun.com
> > CC: core-libs-dev@openjdk.java.net
>
> >
> > [Chris or Alan, please review and file a bug]
> >
> > OK, guys,
> >
> > Here's a patch:
> >
> > http://cr.openjdk.java.net/~martin/webrevs/openjdk7/ArrayResize/<http://cr.openjdk.java.net/%7Emartin/webrevs/openjdk7/ArrayResize/>
> >
> > Martin
>
>
> ------------------------------
> Hotmail: Trusted email with powerful SPAM protection. Sign up 
> now.<https://signup.live.com/signup.aspx?id=60969>
>

Reply via email to