Repository: incubator-freemarker
Updated Branches:
  refs/heads/3 def59eb43 -> 7887a9208


FREEMARKER-55: no list needed; use array simply in new #of()


Project: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/incubator-freemarker/commit/7887a920
Tree: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/tree/7887a920
Diff: http://git-wip-us.apache.org/repos/asf/incubator-freemarker/diff/7887a920

Branch: refs/heads/3
Commit: 7887a9208f9361b8512fb00fbc7d56841d3e6050
Parents: def59eb
Author: Woonsan Ko <woon...@apache.org>
Authored: Fri Jan 5 23:18:44 2018 -0500
Committer: Woonsan Ko <woon...@apache.org>
Committed: Fri Jan 5 23:18:44 2018 -0500

----------------------------------------------------------------------
 .../freemarker/core/util/StringToIndexMap.java  | 35 ++++++++------------
 1 file changed, 13 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-freemarker/blob/7887a920/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
----------------------------------------------------------------------
diff --git 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
index a2248b1..4d9a150 100644
--- 
a/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
+++ 
b/freemarker-core/src/main/java/org/apache/freemarker/core/util/StringToIndexMap.java
@@ -19,8 +19,6 @@
 
 package org.apache.freemarker.core.util;
 
-import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
@@ -141,12 +139,20 @@ public final class StringToIndexMap {
      */
     public static StringToIndexMap of(StringToIndexMap baseMap, Entry... 
additionalEntries) {
         final int additionalEntriesLength = (additionalEntries != null) ? 
additionalEntries.length : 0;
-        List<Entry> newEntries = new ArrayList<>(baseMap.size() + 
additionalEntriesLength);
-        baseMap.collectAllEntriesInto(newEntries);
-        for (int i = 0; i < additionalEntriesLength; i++) {
-            newEntries.add(additionalEntries[i]);
+        Entry[] newEntries = new Entry[baseMap.size() + 
additionalEntriesLength];
+        int index = 0;
+        if (baseMap.buckets != null) {
+            for (Entry entry : baseMap.buckets) {
+                while (entry != null) {
+                    newEntries[index++] = entry;
+                    entry = entry.nextInSameBucket;
+                }
+            }
         }
-        return of(newEntries.toArray(new Entry[newEntries.size()]));
+        if (additionalEntriesLength > 0) {
+            System.arraycopy(additionalEntries, 0, newEntries, index, 
additionalEntriesLength);
+        }
+        return of(newEntries);
     }
 
     // This is a very frequent case, so we optimize for it a bit.
@@ -354,21 +360,6 @@ public final class StringToIndexMap {
         return null;
     }
 
-    /**
-     * Traverse all the entries and collect all into the given {@code 
targetEntryCollection}.
-     */
-    private void collectAllEntriesInto(Collection<Entry> 
targetEntryCollection) {
-        if (buckets == null) {
-            return;
-        }
-        for (Entry entry : buckets) {
-            while (entry != null) {
-                targetEntryCollection.add(entry);
-                entry = entry.nextInSameBucket;
-            }
-        }
-    }
-
     /*
     // Code used to see how well the elements are spread among the buckets:
 

Reply via email to