Review for CR 6728865 : Improved heuristics for Collections.disjoint() [updated]

Ulf Zibis Ulf.Zibis at gmx.de
Thu Dec 23 22:24:31 UTC 2010


Am 23.12.2010 22:24, schrieb Ulf Zibis:
> Aren't the explanation comments from my last example clear enough and more fluently readable?

Shouldn't we examine the size at first? :

         // collections to iterate and examine containment on
         Collection<?> iterate = c1;
         Collection<?> contains = c2;

         // performance optimization cases
         int c1size = c1.size();
         int c2size = c2.size();
         if (c1size == 0 || c2size == 0) {
             // At least one collection is empty. Nothing will match.
             return true;
         if (c1 instanceof Set || (!(c2 instanceof Set) && c1size > c2size) {
             // As mere Collection's contains() impl predictably performs worse
             // than Set's (< O(N/2)), iterate on c2.
             // Or if both are mere collections, iterate over smaller collection.
             // E.g. if c1 contains 3 elements and c2 contains 50 elements and
             // assuming contains() requires ceiling O(N/2) comparisons then
             // checking for all c1 elements in c2 would require 75 comparisons
             // vs. all c2 elements in c1 would require 100.
             iterate = c2;
             contains = c1;
         }

-Ulf





More information about the core-libs-dev mailing list