From cc8829ccf3a2acd6919dfb7c7afd2385daaa11a0 Mon Sep 17 00:00:00 2001 From: Fabian Lange Date: Mon, 2 Mar 2015 12:16:19 +0100 Subject: [PATCH] Improve performance of Util.collectionEquals (#16968). This change checks the length of both collections first before iterating them. This massively speeds up the comparison in case the collections do not have the same length. Also in the case where the lengths are equal, this saves the collection2.hasNext() checks. Change-Id: If1325f3581d12bf742d77fbf8b0f89511fa11252 --- client/src/com/vaadin/client/Util.java | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/client/src/com/vaadin/client/Util.java b/client/src/com/vaadin/client/Util.java index 778f7c3861..99e6507d81 100644 --- a/client/src/com/vaadin/client/Util.java +++ b/client/src/com/vaadin/client/Util.java @@ -825,30 +825,29 @@ public class Util { * @return true if the collections contain the same elements in the same * order, false otherwise */ - public static boolean collectionsEquals(Collection collection1, - Collection collection2) { + public static boolean collectionsEquals(Collection collection1, + Collection collection2) { if (collection1 == null) { return collection2 == null; } if (collection2 == null) { return false; } - Iterator collection1Iterator = collection1.iterator(); - Iterator collection2Iterator = collection2.iterator(); + + if (collection1.size() != collection2.size()) { + return false; + } + + Iterator collection1Iterator = collection1.iterator(); + Iterator collection2Iterator = collection2.iterator(); while (collection1Iterator.hasNext()) { - if (!collection2Iterator.hasNext()) { - return false; - } Object collection1Object = collection1Iterator.next(); Object collection2Object = collection2Iterator.next(); if (collection1Object != collection2Object) { return false; } } - if (collection2Iterator.hasNext()) { - return false; - } return true; } -- 2.39.5