Impact of code difference in Collection#contains() worth improving?

Louis Wasserman lowasser at google.com
Thu Aug 28 17:30:10 UTC 2014


Comparator is spec'd to be allowed to return any number, positive,
negative, or zero, but indexOf is specifically spec'd to return -1.

If an indexOf method returns a negative value other than -1, that is a bug;
it is not a bug if a Comparator returns a number other than -1, 0, +1.


On Thu, Aug 28, 2014 at 10:27 AM, Ulf Zibis <Ulf.Zibis at cosoco.de> wrote:

>
> Am 27.08.2014 um 17:51 schrieb Martin Buchholz:
>
>  The ArrayList version saves one byte of bytecode, and is therefore very
>> slightly better.  We should bless that version and use it consistently.
>>
>
> +1
> Additional argument:
> The LinkedList code requires to load 32/64-Bit -1 into CPU. This may take
> some time on some CPU and at least wastes memory footprint.
> Additionally register pressure increases.
> Vitaly, please correct me, if I'm wrong, just for learning more.
>
> Another advantage is that there is no problem if some implementation of
> indexOf() erroneously returns another negative value than -1. I remember
> some compare() implementations, which sometimes return different values
> than only -1, 0, +1.
>
> -Ulf
>
>
>  ArrayList:
>>>
>>>      public boolean contains(Object o) {
>>>          return indexOf(o) >= 0;
>>>      }
>>>
>>> LinkedList:
>>>
>>>      public boolean contains(Object o) {
>>>          return indexOf(o) != -1;
>>>      }
>>>
>>>
>


-- 
Louis Wasserman



More information about the core-libs-dev mailing list