You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pa...@apache.org on 2017/03/26 19:52:39 UTC
svn commit: r1788773 -
/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ImmutableMap.java
Author: pauls
Date: Sun Mar 26 19:52:39 2017
New Revision: 1788773
URL: http://svn.apache.org/viewvc?rev=1788773&view=rev
Log:
Make the empty ImmutableMap a singleton to improve memory usage (This closes #97).
Modified:
felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ImmutableMap.java
Modified: felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ImmutableMap.java
URL: http://svn.apache.org/viewvc/felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ImmutableMap.java?rev=1788773&r1=1788772&r2=1788773&view=diff
==============================================================================
--- felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ImmutableMap.java (original)
+++ felix/trunk/framework/src/main/java/org/apache/felix/framework/util/ImmutableMap.java Sun Mar 26 19:52:39 2017
@@ -20,19 +20,25 @@ package org.apache.felix.framework.util;
import java.util.AbstractMap;
import java.util.AbstractSet;
+import java.util.Collections;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class ImmutableMap<K, V> extends AbstractMap<K, V>
{
+ @SuppressWarnings({ "rawtypes" })
+ private static final ImmutableMap EMPTY_MAP = new ImmutableMap();
+
final Entry<K, V>[] entries;
+ @SuppressWarnings("unchecked")
public static <K, V> ImmutableMap<K, V> newInstance(Entry<K, V>... entries)
{
- return new ImmutableMap<K, V>(entries);
+ return entries.length == 0 ? EMPTY_MAP : new ImmutableMap<K, V>(entries);
}
+ @SuppressWarnings("unchecked")
public static <K, V> ImmutableMap<K, V> newInstance(Map<K, V> entries)
{
if (entries instanceof ImmutableMap)
@@ -41,15 +47,22 @@ public class ImmutableMap<K, V> extends
}
else
{
- return new ImmutableMap<K, V>(entries);
+ return entries.isEmpty() ? EMPTY_MAP : new ImmutableMap<K, V>(entries);
}
}
+ @SuppressWarnings("unchecked")
+ private ImmutableMap()
+ {
+ this.entries = new Entry[0];
+ }
+
protected ImmutableMap(Entry<K, V>[] entries)
{
this.entries = entries.clone();
}
+ @SuppressWarnings("unchecked")
protected ImmutableMap(Map<K, V> map)
{
this.entries = map.entrySet().toArray(new Entry[map.size()]);