You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@juneau.apache.org by ja...@apache.org on 2022/02/19 17:22:41 UTC

[juneau] branch master updated: Collections usage optimizations.

This is an automated email from the ASF dual-hosted git repository.

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 59ddb1d  Collections usage optimizations.
59ddb1d is described below

commit 59ddb1d6bb5ac6863020e94540a0da13b3512059
Author: JamesBognar <ja...@salesforce.com>
AuthorDate: Sat Feb 19 12:22:15 2022 -0500

    Collections usage optimizations.
---
 .../main/ConfigurablePropertyCodeGenerator.java    |   2 +-
 .../main/java/org/apache/juneau/config/Config.java |  17 ++-
 .../apache/juneau/config/event/ConfigEvents.java   |  10 +-
 .../apache/juneau/config/internal/ConfigMap.java   | 106 +++++++------------
 .../apache/juneau/config/store/ConfigStore.java    |   4 +-
 .../org/apache/juneau/dto/html5/HtmlElement.java   |  15 +--
 .../apache/juneau/dto/jsonschema/JsonSchema.java   |   9 +-
 .../org/apache/juneau/dto/swagger/Operation.java   |  10 +-
 .../apache/juneau/dto/swagger/ParameterInfo.java   |   5 +-
 .../apache/juneau/dto/swagger/ResponseInfo.java    |   7 +-
 .../org/apache/juneau/dto/swagger/SchemaInfo.java  |   2 +-
 .../apache/juneau/dto/swagger/SecurityScheme.java  |   2 +-
 .../org/apache/juneau/dto/swagger/Swagger.java     |  20 ++--
 .../apache/juneau/dto/swagger/SwaggerElement.java  |   4 +-
 .../apache/juneau/dto/swagger/ui/SwaggerUI.java    |   2 +-
 .../java/org/apache/juneau/jena/RdfClassMeta.java  |   6 +-
 .../org/apache/juneau/jena/RdfParserSession.java   |   4 +-
 .../java/org/apache/juneau/jena/RdfSerializer.java |   2 +-
 .../apache/juneau/jena/RdfSerializerSession.java   |   4 +-
 .../main/java/org/apache/juneau/BeanContext.java   |  30 +++---
 .../main/java/org/apache/juneau/BeanFilter.java    |  10 +-
 .../src/main/java/org/apache/juneau/BeanMap.java   |   7 +-
 .../src/main/java/org/apache/juneau/BeanMeta.java  |  35 +++----
 .../java/org/apache/juneau/BeanPropertyMeta.java   |  10 +-
 .../main/java/org/apache/juneau/BeanSession.java   |   2 +-
 .../src/main/java/org/apache/juneau/ClassMeta.java |   4 +-
 .../src/main/java/org/apache/juneau/Context.java   |   8 +-
 .../assertions/FluentThrowableAssertion.java       |   5 +-
 .../java/org/apache/juneau/collections/OMap.java   |   3 +-
 .../main/java/org/apache/juneau/cp/BeanStore.java  |   4 +-
 .../org/apache/juneau/cp/DefaultClassList.java     |   4 +-
 .../org/apache/juneau/cp/DefaultSettingsMap.java   |   4 +-
 .../main/java/org/apache/juneau/cp/FileFinder.java |   2 +-
 .../main/java/org/apache/juneau/cp/Messages.java   |   7 +-
 .../org/apache/juneau/encoders/EncoderSet.java     |   4 +-
 .../org/apache/juneau/html/HtmlDocSerializer.java  |  28 ++---
 .../org/apache/juneau/html/HtmlParserSession.java  |   6 +-
 .../apache/juneau/html/HtmlSerializerSession.java  |   2 +-
 .../juneau/http/header/BasicCsvArrayHeader.java    |   6 +-
 .../http/header/BasicEntityTagArrayHeader.java     |   7 +-
 .../org/apache/juneau/http/header/HeaderList.java  |  18 ++--
 .../org/apache/juneau/http/header/MediaRange.java  |   2 +-
 .../org/apache/juneau/http/header/MediaRanges.java |   2 +-
 .../org/apache/juneau/http/header/MediaType.java   |   5 +-
 .../org/apache/juneau/http/header/StringRange.java |   2 +-
 .../apache/juneau/http/header/StringRanges.java    |   2 +-
 .../java/org/apache/juneau/http/header/Thrown.java |   7 +-
 .../java/org/apache/juneau/http/part/PartList.java |  20 ++--
 .../org/apache/juneau/httppart/HttpPartSchema.java |  12 +--
 .../juneau/httppart/bean/RequestBeanMeta.java      |   6 +-
 .../juneau/httppart/bean/ResponseBeanMeta.java     |  10 +-
 .../apache/juneau/internal/CollectionUtils.java    | 115 +++++++++++++++++++++
 .../apache/juneau/internal/DelegateBeanMap.java    |   6 +-
 .../org/apache/juneau/internal/ListBuilder.java    |   3 +-
 .../org/apache/juneau/internal/SetBuilder.java     |   3 +-
 .../org/apache/juneau/json/JsonParserSession.java  |   2 +-
 .../juneau/jsonschema/JsonSchemaGenerator.java     |   3 +-
 .../jsonschema/JsonSchemaGeneratorSession.java     |   3 +-
 .../juneau/msgpack/MsgPackSerializerSession.java   |   5 +-
 .../java/org/apache/juneau/parser/ParserSet.java   |   4 +-
 .../java/org/apache/juneau/parser/Position.java    |   4 +-
 .../org/apache/juneau/pojotools/PojoSearcher.java  |   5 +-
 .../org/apache/juneau/pojotools/PojoSorter.java    |  13 +--
 .../org/apache/juneau/pojotools/PojoViewer.java    |   6 +-
 .../org/apache/juneau/pojotools/SearchArgs.java    |   3 +-
 .../java/org/apache/juneau/pojotools/SortArgs.java |   6 +-
 .../java/org/apache/juneau/pojotools/ViewArgs.java |   4 +-
 .../java/org/apache/juneau/reflect/ClassInfo.java  |  28 ++---
 .../java/org/apache/juneau/reflect/MethodInfo.java |   3 +-
 .../apache/juneau/serializer/SerializerSet.java    |   7 +-
 .../org/apache/juneau/swaps/MatchResultSwap.java   |   4 +-
 .../org/apache/juneau/uon/UonParserSession.java    |   4 +-
 .../java/org/apache/juneau/utils/PojoQuery.java    |   5 +-
 .../org/apache/juneau/utils/ReflectionMap.java     |  22 ++--
 .../java/org/apache/juneau/utils/SearchArgs.java   |  14 +--
 .../juneau/utils/StringExpressionMatcher.java      |   5 +-
 .../java/org/apache/juneau/xml/XmlClassMeta.java   |   6 +-
 .../org/apache/juneau/xml/XmlParserSession.java    |   4 +-
 .../java/org/apache/juneau/xml/XmlSerializer.java  |   2 +-
 .../juneau/examples/rest/ContentComboTestBase.java |   3 +-
 .../org/apache/juneau/microservice/LogConfig.java  |   6 +-
 .../apache/juneau/microservice/Microservice.java   |   5 +-
 .../microservice/resources/DirectoryResource.java  |   3 +-
 .../microservice/resources/LogsResource.java       |   3 +-
 .../org/apache/juneau/rest/test/RestTestcase.java  |   6 +-
 .../microservice/jetty/JettyMicroservice.java      |  11 +-
 .../org/apache/juneau/rest/client/RestClient.java  |   2 +-
 .../org/apache/juneau/rest/client/RestRequest.java |   4 +-
 .../apache/juneau/rest/mock/MockHttpSession.java   |   4 +-
 .../org/apache/juneau/rest/mock/MockLogger.java    |   3 +-
 .../apache/juneau/rest/mock/MockRestRequest.java   |   6 +-
 .../juneau/rest/mock/MockServletRequest.java       |  11 +-
 .../juneau/rest/mock/MockServletResponse.java      |   4 +-
 .../java/org/apache/juneau/rest/RestChildren.java  |   4 +-
 .../java/org/apache/juneau/rest/RestContext.java   |  14 +--
 .../java/org/apache/juneau/rest/RestOpContext.java |  10 +-
 .../org/apache/juneau/rest/RestOperations.java     |   6 +-
 .../java/org/apache/juneau/rest/RestSession.java   |   4 +-
 .../org/apache/juneau/rest/arg/FormDataArg.java    |   2 +-
 .../java/org/apache/juneau/rest/arg/HeaderArg.java |   2 +-
 .../java/org/apache/juneau/rest/arg/QueryArg.java  |   2 +-
 .../org/apache/juneau/rest/guard/RoleMatcher.java  |   5 +-
 .../juneau/rest/httppart/NamedAttributeList.java   |   8 +-
 .../juneau/rest/httppart/RequestAttributes.java    |   3 +-
 .../juneau/rest/httppart/RequestFormParams.java    |   2 +-
 .../juneau/rest/httppart/RequestHeaders.java       |   2 +-
 .../juneau/rest/httppart/RequestQueryParams.java   |   2 +-
 .../org/apache/juneau/rest/remote/RrpcServlet.java |   3 +-
 .../org/apache/juneau/rest/stats/ThrownStore.java  |   3 +-
 .../rest/swagger/BasicSwaggerProviderSession.java  |  14 +--
 .../org/apache/juneau/rest/util/RestUtils.java     |   2 +-
 .../apache/juneau/rest/util/UrlPathMatcher.java    |   3 +-
 .../apache/juneau/pojotools/PojoSearcherTest.java  |   1 -
 113 files changed, 538 insertions(+), 419 deletions(-)

diff --git a/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java b/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
index f2c3ae9..3b58119 100644
--- a/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
+++ b/juneau-all/src/java/main/ConfigurablePropertyCodeGenerator.java
@@ -45,7 +45,7 @@ public class ConfigurablePropertyCodeGenerator {
 	public static void main(String[] args) throws Exception {
 		Map<Class<?>, Set<Method>> configMethods = new HashMap<>();
 
-		Map<Class<?>,File> classMap = new LinkedHashMap<>();
+		Map<Class<?>,File> classMap = map();
 		for (String sp : SOURCE_PATHS) {
 			File f = new File("../"+sp+"/src/main/java");
 			Path p = f.toPath();
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
index cb2f6c5..6eb746e 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/Config.java
@@ -17,7 +17,6 @@ import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
-import static java.util.Collections.*;
 
 import java.io.*;
 import java.lang.annotation.*;
@@ -115,7 +114,7 @@ public final class Config extends Context implements ConfigEventListener {
 	 * 	<br>Each call constructs a new list.
 	 */
 	public synchronized static List<String> getCandidateSystemDefaultConfigNames() {
-		List<String> l = new ArrayList<>();
+		List<String> l = list();
 
 		String s = System.getProperty("juneau.configFile");
 		if (s != null) {
@@ -204,7 +203,7 @@ public final class Config extends Context implements ConfigEventListener {
 			store = FileStore.DEFAULT;
 			serializer = SimpleJsonSerializer.DEFAULT;
 			parser = JsonParser.DEFAULT;
-			mods = new LinkedHashMap<>();
+			mods = map();
 			mods(XorEncodeMod.INSTANCE);
 			varResolver = VarResolver.DEFAULT;
 			binaryLineLength = env("Config.binaryLineLength", -1);
@@ -224,7 +223,7 @@ public final class Config extends Context implements ConfigEventListener {
 			store = copyFrom.store;
 			serializer = copyFrom.serializer;
 			parser = copyFrom.parser;
-			mods = new LinkedHashMap<>(copyFrom.mods);
+			mods = copyOf(copyFrom.mods);
 			varResolver = copyFrom.varResolver;
 			binaryLineLength = copyFrom.binaryLineLength;
 			binaryFormat = copyFrom.binaryFormat;
@@ -243,7 +242,7 @@ public final class Config extends Context implements ConfigEventListener {
 			store = copyFrom.store;
 			serializer = copyFrom.serializer;
 			parser = copyFrom.parser;
-			mods = new LinkedHashMap<>(copyFrom.mods);
+			mods = copyOf(copyFrom.mods);
 			varResolver = copyFrom.varResolver;
 			binaryLineLength = copyFrom.binaryLineLength;
 			binaryFormat = copyFrom.binaryFormat;
@@ -544,7 +543,7 @@ public final class Config extends Context implements ConfigEventListener {
 	final VarResolverSession varSession;
 
 	private final ConfigMap configMap;
-	private final List<ConfigEventListener> listeners = Collections.synchronizedList(new LinkedList<ConfigEventListener>());
+	private final List<ConfigEventListener> listeners = synced(linkedList());
 
 
 	@Override /* Context */
@@ -568,7 +567,7 @@ public final class Config extends Context implements ConfigEventListener {
 		serializer = builder.serializer;
 		parser = builder.parser;
 		beanSession = parser.getBeanContext().getSession();
-		mods = unmodifiableMap(new LinkedHashMap<>(builder.mods));
+		mods = unmodifiable(copyOf(builder.mods));
 		varResolver = builder.varResolver;
 		varSession = varResolver
 			.copy()
@@ -915,7 +914,7 @@ public final class Config extends Context implements ConfigEventListener {
 	 * @return The section names defined in this config.
 	 */
 	public Set<String> getSectionNames() {
-		return Collections.unmodifiableSet(configMap.getSections());
+		return unmodifiable(configMap.getSections());
 	}
 
 	/**
@@ -1172,7 +1171,7 @@ public final class Config extends Context implements ConfigEventListener {
 	}
 
 	List<ConfigEventListener> getListeners() {
-		return Collections.unmodifiableList(listeners);
+		return unmodifiable(listeners);
 	}
 
 
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvents.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvents.java
index 5776e08..86b79f8 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvents.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/event/ConfigEvents.java
@@ -35,10 +35,7 @@ public class ConfigEvents extends ArrayList<ConfigEvent> {
 	 * @return <jk>true</jk> if the specified section was modified in this list of events.
 	 */
 	public boolean isSectionModified(String name) {
-		for (ConfigEvent ce : this)
-			if (eq(name, ce.getSection()))
-				return true;
-		return false;
+		return stream().anyMatch(x -> eq(name, x.getSection()));
 	}
 
 	/**
@@ -49,9 +46,6 @@ public class ConfigEvents extends ArrayList<ConfigEvent> {
 	 * @return <jk>true</jk> if the specified key was modified in this list of events.
 	 */
 	public boolean isKeyModified(String section, String key) {
-		for (ConfigEvent ce : this)
-			if (eq(section, ce.getSection()) && eq(key, ce.getKey()))
-				return true;
-		return false;
+		return stream().anyMatch(x -> eq(section, x.getSection()) && eq(key, x.getKey()));
 	}
 }
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
index ffcdd9b..a754842 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMap.java
@@ -41,16 +41,16 @@ public class ConfigMap implements ConfigStoreListener {
 	final String name;                       // The name  of this object.
 
 	// Changes that have been applied since the last load.
-	private final List<ConfigEvent> changes = Collections.synchronizedList(new ConfigEvents());
+	private final List<ConfigEvent> changes = synced(new ConfigEvents());
 
 	// Registered listeners listening for changes during saves or reloads.
-	private final Set<ConfigEventListener> listeners = Collections.synchronizedSet(new HashSet<ConfigEventListener>());
+	private final Set<ConfigEventListener> listeners = synced(set());
 
 	// The parsed entries of this map with all changes applied.
-	final Map<String,ConfigSection> entries = Collections.synchronizedMap(new LinkedHashMap<String,ConfigSection>());
+	final Map<String,ConfigSection> entries = synced(map());
 
 	// The original entries of this map before any changes were applied.
-	final Map<String,ConfigSection> oentries = Collections.synchronizedMap(new LinkedHashMap<String,ConfigSection>());
+	final Map<String,ConfigSection> oentries = synced(map());
 
 	// Import statements in this config.
 	final List<Import> imports = new CopyOnWriteArrayList<>();
@@ -83,13 +83,12 @@ public class ConfigMap implements ConfigStoreListener {
 
 		entries.clear();
 		oentries.clear();
-		for (Import ir : imports)
-			ir.unregisterAll();
+		imports.forEach(x -> x.unregisterAll());
 		imports.clear();
 
-		Map<String,ConfigMap> imports = new LinkedHashMap<>();
+		Map<String,ConfigMap> imports = map();
 
-		List<String> lines = new LinkedList<>();
+		List<String> lines = linkedList();
 		try (Scanner scanner = new Scanner(contents)) {
 			while (scanner.hasNextLine()) {
 				String line = scanner.nextLine();
@@ -122,7 +121,7 @@ public class ConfigMap implements ConfigStoreListener {
 			}
 		}
 
-		List<Import> irl = new ArrayList<>(imports.size());
+		List<Import> irl = list(imports.size());
 		forEachReverse(listFrom(imports.values()), x -> irl.add(new Import(x).register(listeners)));
 		this.imports.addAll(irl);
 
@@ -165,13 +164,13 @@ public class ConfigMap implements ConfigStoreListener {
 			}
 		}
 
-		lines = new ArrayList<>(lines);
+		lines = copyOf(lines);
 		int last = lines.size()-1;
 		int S1 = 1; // Looking for section.
 		int S2 = 2; // Found section, looking for start.
 		int state = S1;
 
-		List<ConfigSection> sections = new ArrayList<>();
+		List<ConfigSection> sections = list();
 
 		for (int i = last; i >= 0; i--) {
 			String l = lines.get(i);
@@ -226,13 +225,8 @@ public class ConfigMap implements ConfigStoreListener {
 			ConfigSection cs = entries.get(section);
 			ConfigMapEntry ce = cs == null ? null : cs.entries.get(key);
 
-			if (ce == null) {
-				for (Import i : imports) {
-					ce = i.getConfigMap().getEntry(section, key);
-					if (ce != null)
-						break;
-				}
-			}
+			if (ce == null)
+				ce = imports.stream().map(y -> y.getConfigMap().getEntry(section, key)).filter(y -> y != null).findFirst().orElse(null);
 
 			return ce;
 		}
@@ -266,16 +260,12 @@ public class ConfigMap implements ConfigStoreListener {
 	 * 	An unmodifiable set of keys.
 	 */
 	public Set<String> getSections() {
-		Set<String> s = null;
-		if (imports.isEmpty()) {
-			s = entries.keySet();
-		} else {
-			s = new LinkedHashSet<>();
-			for (Import ir : imports)
-				s.addAll(ir.getConfigMap().getSections());
+		Set<String> s = imports.isEmpty() ? entries.keySet() : set();
+		if (! imports.isEmpty()) {
+			imports.forEach(x -> s.addAll(x.getConfigMap().getSections()));
 			s.addAll(entries.keySet());
 		}
-		return Collections.unmodifiableSet(s);
+		return unmodifiable(s);
 	}
 
 	/**
@@ -290,18 +280,14 @@ public class ConfigMap implements ConfigStoreListener {
 	 */
 	public Set<String> getKeys(String section) {
 		checkSectionName(section);
-		Set<String> s = null;
 		ConfigSection cs = entries.get(section);
-		if (imports.isEmpty()) {
-			s = cs == null ? Collections.<String>emptySet() : cs.entries.keySet();
-		} else {
-			s = new LinkedHashSet<>();
-			for (Import i : imports)
-				s.addAll(i.getConfigMap().getKeys(section));
+		Set<String> s = imports.isEmpty() && cs != null ? cs.entries.keySet() : set();
+		if (! imports.isEmpty()) {
+			imports.forEach(x -> s.addAll(x.getConfigMap().getKeys(section)));
 			if (cs != null)
 				s.addAll(cs.entries.keySet());
 		}
-		return Collections.unmodifiableSet(s);
+		return unmodifiable(s);
 	}
 
 	/**
@@ -315,10 +301,7 @@ public class ConfigMap implements ConfigStoreListener {
 	 */
 	public boolean hasSection(String section) {
 		checkSectionName(section);
-		for (Import i : imports)
-			if (i.getConfigMap().hasSection(section))
-				return true;
-		return entries.get(section) != null;
+		return entries.get(section) != null || imports.stream().anyMatch(x -> x.getConfigMap().hasSection(section));
 	}
 
 	//-----------------------------------------------------------------------------------------------------------------
@@ -563,8 +546,7 @@ public class ConfigMap implements ConfigStoreListener {
 	 */
 	public ConfigMap register(ConfigEventListener listener) {
 		listeners.add(listener);
-		for (Import ir : imports)
-			ir.register(listener);
+		imports.forEach(x -> x.register(listener));
 		return this;
 	}
 
@@ -582,8 +564,7 @@ public class ConfigMap implements ConfigStoreListener {
 	 */
 	public ConfigMap unregister(ConfigEventListener listener) {
 		listeners.remove(listener);
-		for (Import ir : imports)
-			ir.register(listener);
+		imports.forEach(x -> x.register(listener));
 		return this;
 	}
 
@@ -593,7 +574,7 @@ public class ConfigMap implements ConfigStoreListener {
 	 * @return The listeners currently associated with this config map.
 	 */
 	public Set<ConfigEventListener> getListeners() {
-		return Collections.unmodifiableSet(listeners);
+		return unmodifiable(listeners);
 	}
 
 	@Override /* ConfigStoreListener */
@@ -605,8 +586,7 @@ public class ConfigMap implements ConfigStoreListener {
 				load(newContents);
 
 				// Reapply our changes on top of the modifications.
-				for (ConfigEvent ce : this.changes)
-					applyChange(false, ce);
+				this.changes.forEach(y -> applyChange(false, y));
 			}
 		} catch (IOException e) {
 			throw runtimeException(e);
@@ -636,14 +616,12 @@ public class ConfigMap implements ConfigStoreListener {
 	public OMap asMap() {
 		OMap m = new OMap();
 		try (SimpleLock x = lock.read()) {
-			for (Import i : imports)
-				m.putAll(i.getConfigMap().asMap());
-			for (ConfigSection cs : entries.values()) {
-				Map<String,String> m2 = new LinkedHashMap<>();
-				for (ConfigMapEntry ce : cs.entries.values())
-					m2.put(ce.key, ce.value);
-				m.put(cs.name, m2);
-			}
+			imports.forEach(y -> m.putAll(y.getConfigMap().asMap()));
+			entries.values().forEach(z -> {
+				Map<String,String> m2 = map();
+				z.entries.values().forEach(y -> m2.put(y.key, y.value));
+				m.put(z.name, m2);
+			});
 		}
 		return m;
 	}
@@ -744,8 +722,7 @@ public class ConfigMap implements ConfigStoreListener {
 
 	private void signal(ConfigEvents changes) {
 		if (changes.size() > 0)
-			for (ConfigEventListener l : listeners)
-				l.onConfigChange(changes);
+			listeners.forEach(x -> x.onConfigChange(changes));
 	}
 
 	private ConfigEvents findDiffs(String updatedContents) throws IOException {
@@ -834,11 +811,11 @@ public class ConfigMap implements ConfigStoreListener {
 
 		final String name;   // The config section name, or blank if the default section.  Never null.
 
-		final List<String> preLines = Collections.synchronizedList(new ArrayList<String>());
+		final List<String> preLines = synced(list());
 		private final String rawLine;
 
-		final Map<String,ConfigMapEntry> oentries = Collections.synchronizedMap(new LinkedHashMap<String,ConfigMapEntry>());
-		final Map<String,ConfigMapEntry> entries = Collections.synchronizedMap(new LinkedHashMap<String,ConfigMapEntry>());
+		final Map<String,ConfigMapEntry> oentries = synced(map());
+		final Map<String,ConfigMapEntry> entries = synced(map());
 
 		/**
 		 * Constructor.
@@ -928,15 +905,14 @@ public class ConfigMap implements ConfigStoreListener {
 	class Import {
 
 		private final ConfigMap configMap;
-		private final Map<ConfigEventListener,ConfigEventListener> listenerMap = Collections.synchronizedMap(new LinkedHashMap<>());
+		private final Map<ConfigEventListener,ConfigEventListener> listenerMap = synced(map());
 
 		Import(ConfigMap configMap) {
 			this.configMap = configMap;
 		}
 
 		synchronized Import register(Collection<ConfigEventListener> listeners) {
-			for (ConfigEventListener l : listeners)
-				register(l);
+			listeners.forEach(x -> register(x));
 			return this;
 		}
 
@@ -945,10 +921,7 @@ public class ConfigMap implements ConfigStoreListener {
 				@Override
 				public void onConfigChange(ConfigEvents events) {
 					ConfigEvents events2 = new ConfigEvents();
-					for (ConfigEvent cev : events) {
-						if (! hasEntry(cev.getSection(), cev.getKey()))
-							events2.add(cev);
-					}
+					events.stream().filter(x -> ! hasEntry(x.getSection(), x.getKey())).forEach(x -> events2.add(x));
 					if (events2.size() > 0)
 						listener.onConfigChange(events2);
 				}
@@ -964,8 +937,7 @@ public class ConfigMap implements ConfigStoreListener {
 		}
 
 		synchronized Import unregisterAll() {
-			for (ConfigEventListener l : listenerMap.values())
-				configMap.unregister(l);
+			listenerMap.values().forEach(x -> configMap.unregister(x));
 			listenerMap.clear();
 			return this;
 		}
diff --git a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
index c523a08..23de3ac 100644
--- a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
+++ b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/store/ConfigStore.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.config.store;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.*;
 import java.lang.annotation.*;
 import java.lang.reflect.*;
@@ -198,7 +200,7 @@ public abstract class ConfigStore extends Context implements Closeable {
 		name = resolveName(name);
 		Set<ConfigStoreListener> s = listeners.get(name);
 		if (s == null) {
-			s = Collections.synchronizedSet(Collections.newSetFromMap(new IdentityHashMap<ConfigStoreListener,Boolean>()));
+			s = synced(Collections.newSetFromMap(new IdentityHashMap<ConfigStoreListener,Boolean>()));
 			listeners.put(name, s);
 		}
 		s.add(l);
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
index 60e9d87..3ed5dc2 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/html5/HtmlElement.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.dto.html5;
 
 import static org.apache.juneau.html.annotation.HtmlFormat.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.xml.annotation.XmlFormat.*;
 
 import java.net.*;
@@ -79,14 +80,14 @@ public abstract class HtmlElement {
 	 * @return This object.
 	 */
 	public HtmlElement attr(String key, Object val) {
-		if (this.attrs == null)
-			this.attrs = new LinkedHashMap<>();
+		if (attrs == null)
+			attrs = map();
 		if (val == null)
-			this.attrs.remove(key);
+			attrs.remove(key);
 		else {
 			if ("url".equals(key) || "href".equals(key) || key.endsWith("action"))
 				val = StringUtils.toURI(val);
-			this.attrs.put(key, val);
+			attrs.put(key, val);
 		}
 		return this;
 	}
@@ -110,9 +111,9 @@ public abstract class HtmlElement {
 	 * @return This object.
 	 */
 	public HtmlElement attrUri(String key, Object val) {
-		if (this.attrs == null)
-			this.attrs = new LinkedHashMap<>();
-		this.attrs.put(key, StringUtils.toURI(val));
+		if (attrs == null)
+			attrs = map();
+		attrs.put(key, StringUtils.toURI(val));
 		return this;
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
index 677be60..1f064f1 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/jsonschema/JsonSchema.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.dto.jsonschema;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.net.*;
@@ -345,7 +346,7 @@ public class JsonSchema {
 	 */
 	public JsonSchema addDefinition(String name, JsonSchema definition) {
 		if (this.definitions == null)
-			this.definitions = new LinkedHashMap<>();
+			this.definitions = map();
 		this.definitions.put(name, definition);
 		setMasterOn(definition);
 		return this;
@@ -427,7 +428,7 @@ public class JsonSchema {
 	 */
 	public JsonSchema addProperties(JsonSchema...properties) {
 		if (this.properties == null)
-			this.properties = new LinkedHashMap<>();
+			this.properties = map();
 		for (JsonSchema p : properties) {
 			if (p.getName() == null)
 				throw new BeanRuntimeException(JsonSchema.class,
@@ -478,7 +479,7 @@ public class JsonSchema {
 	 */
 	public JsonSchema addPatternProperties(JsonSchemaProperty...properties) {
 		if (this.patternProperties == null)
-			this.patternProperties = new LinkedHashMap<>();
+			this.patternProperties = map();
 		for (JsonSchema p : properties) {
 			if (p.getName() == null)
 				throw new BeanRuntimeException(JsonSchema.class,
@@ -521,7 +522,7 @@ public class JsonSchema {
 	 */
 	public JsonSchema addDependency(String name, JsonSchema dependency) {
 		if (this.dependencies == null)
-			this.dependencies = new LinkedHashMap<>();
+			this.dependencies = map();
 		this.dependencies.put(name, dependency);
 		setMasterOn(dependency);
 		return this;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java
index c33eec4..dbe84cb 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Operation.java
@@ -173,7 +173,7 @@ public class Operation extends SwaggerElement {
 		if (copyFrom.parameters == null) {
 			this.parameters = null;
 		} else {
-			this.parameters = new ArrayList<>();
+			this.parameters = list();
 			for (ParameterInfo p : copyFrom.parameters)
 				this.parameters.add(p.copy());
 		}
@@ -181,7 +181,7 @@ public class Operation extends SwaggerElement {
 		if (copyFrom.responses == null) {
 			this.responses = null;
 		} else {
-			this.responses = new LinkedHashMap<>();
+			this.responses = map();
 			for (Map.Entry<String,ResponseInfo> e : copyFrom.responses.entrySet())
 				this.responses.put(e.getKey(), e.getValue().copy());
 		}
@@ -189,9 +189,9 @@ public class Operation extends SwaggerElement {
 		if (copyFrom.security == null) {
 			this.security = null;
 		} else {
-			this.security = new ArrayList<>();
+			this.security = list();
 			for (Map<String,List<String>> m : copyFrom.security) {
-				Map<String,List<String>> m2 = new LinkedHashMap<>();
+				Map<String,List<String>> m2 = map();
 				for (Map.Entry<String,List<String>> e : m.entrySet())
 					m2.put(e.getKey(), copyOf(e.getValue()));
 				this.security.add(m2);
@@ -1132,7 +1132,7 @@ public class Operation extends SwaggerElement {
 	 * @return This object.
 	 */
 	public Operation security(String scheme, String...alternatives) {
-		Map<String,List<String>> m = new LinkedHashMap<>();
+		Map<String,List<String>> m = map();
 		m.put(scheme, Arrays.asList(alternatives));
 		addSecurity(Collections.singletonList(m));
 		return this;
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java
index 204f245..22176e4 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ParameterInfo.java
@@ -166,10 +166,7 @@ public class ParameterInfo extends SwaggerElement {
 		this.type = copyFrom.type;
 		this.uniqueItems = copyFrom.uniqueItems;
 
-		if (copyFrom.examples == null)
-			this.examples = null;
-		else
-			this.examples = new LinkedHashMap<>(copyFrom.examples);
+		this.examples = copyOf(copyFrom.examples);
 	}
 
 	/**
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
index 64c3a12..e9a1f3e 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ResponseInfo.java
@@ -85,15 +85,12 @@ public class ResponseInfo extends SwaggerElement {
 		this.description = copyFrom.description;
 		this.schema = copyFrom.schema == null ? null : copyFrom.schema.copy();
 
-		if (copyFrom.examples == null)
-			this.examples = null;
-		else
-			this.examples = new LinkedHashMap<>(copyFrom.examples);
+		this.examples = copyOf(copyFrom.examples);
 
 		if (copyFrom.headers == null) {
 			this.headers = null;
 		} else {
-			this.headers = new LinkedHashMap<>();
+			this.headers = map();
 			for (Map.Entry<String,HeaderInfo> e : copyFrom.headers.entrySet())
 				this.headers.put(e.getKey(), e.getValue().copy());
 		}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
index 1da6bde..0aa5873 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SchemaInfo.java
@@ -148,7 +148,7 @@ public class SchemaInfo extends SwaggerElement {
 		if (copyFrom.properties == null) {
 			this.properties = null;
 		} else {
-			this.properties = new LinkedHashMap<>();
+			this.properties = map();
 			for (Map.Entry<String,SchemaInfo> e : copyFrom.properties.entrySet())
 				this.properties.put(e.getKey(), e.getValue().copy());
 		}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
index 1fc443b..821f6d8 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SecurityScheme.java
@@ -94,7 +94,7 @@ public class SecurityScheme extends SwaggerElement {
 		this.flow = copyFrom.flow;
 		this.in = copyFrom.in;
 		this.name = copyFrom.name;
-		this.scopes = copyFrom.scopes == null ? null : new LinkedHashMap<>(copyFrom.scopes);
+		this.scopes = copyOf(copyFrom.scopes);
 		this.tokenUrl = copyFrom.tokenUrl;
 		this.type = copyFrom.type;
 	}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
index 0bdbf6b..8bfbf85 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/Swagger.java
@@ -93,7 +93,7 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.definitions == null) {
 			this.definitions = null;
 		} else {
-			this.definitions = new LinkedHashMap<>();
+			this.definitions = map();
 			for (Map.Entry<String,OMap> e : copyFrom.definitions.entrySet())
 				this.definitions.put(e.getKey(), new OMap(e.getValue()));
 		}
@@ -101,7 +101,7 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.paths == null) {
 			this.paths = null;
 		} else {
-			this.paths = new LinkedHashMap<>();
+			this.paths = map();
 			for (Map.Entry<String,OperationMap> e : copyFrom.paths.entrySet()) {
 				OperationMap m = new OperationMap();
 				for (Map.Entry<String,Operation> e2 : e.getValue().entrySet())
@@ -113,7 +113,7 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.parameters == null) {
 			this.parameters = null;
 		} else {
-			this.parameters = new LinkedHashMap<>();
+			this.parameters = map();
 			for (Map.Entry<String,ParameterInfo> e : copyFrom.parameters.entrySet())
 				this.parameters.put(e.getKey(), e.getValue().copy());
 		}
@@ -121,7 +121,7 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.responses == null) {
 			this.responses = null;
 		} else {
-			this.responses = new LinkedHashMap<>();
+			this.responses = map();
 			for (Map.Entry<String,ResponseInfo> e : copyFrom.responses.entrySet())
 				this.responses.put(e.getKey(), e.getValue().copy());
 		}
@@ -129,9 +129,9 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.security == null) {
 			this.security = null;
 		} else {
-			this.security = new ArrayList<>();
+			this.security = list();
 			for (Map<String,List<String>> m : copyFrom.security) {
-				Map<String,List<String>> m2 = new LinkedHashMap<>();
+				Map<String,List<String>> m2 = map();
 				for (Map.Entry<String,List<String>> e : m.entrySet())
 					m2.put(e.getKey(), copyOf(e.getValue()));
 				this.security.add(m2);
@@ -141,7 +141,7 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.securityDefinitions == null) {
 			this.securityDefinitions = null;
 		} else {
-			this.securityDefinitions = new LinkedHashMap<>();
+			this.securityDefinitions = map();
 			for (Map.Entry<String,SecurityScheme> e : copyFrom.securityDefinitions.entrySet())
 				this.securityDefinitions.put(e.getKey(), e.getValue().copy());
 		}
@@ -149,7 +149,7 @@ public class Swagger extends SwaggerElement {
 		if (copyFrom.tags == null) {
 			this.tags = null;
 		} else {
-			this.tags = new LinkedHashSet<>();
+			this.tags = CollectionUtils.set();
 			for (Tag t : copyFrom.tags)
 				this.tags.add(t.copy());
 		}
@@ -1240,8 +1240,8 @@ public class Swagger extends SwaggerElement {
 	 * @return This object.
 	 */
 	public Swagger security(String scheme, String...alternatives) {
-		Map<String,List<String>> m = new LinkedHashMap<>();
-		m.put(scheme, Arrays.asList(alternatives));
+		Map<String,List<String>> m = map();
+		m.put(scheme, alist(alternatives));
 		return addSecurity(Collections.singleton(m));
 	}
 
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
index c7e1be9..24a89ea 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/SwaggerElement.java
@@ -38,7 +38,7 @@ public abstract class SwaggerElement {
 
 	SwaggerElement(SwaggerElement copyFrom) {
 		this.strict = copyFrom.strict;
-		this.extra = copyFrom.extra == null ? null : new LinkedHashMap<>(copyFrom.extra);
+		this.extra = copyOf(copyFrom.extra);
 	}
 
 	/**
@@ -127,7 +127,7 @@ public abstract class SwaggerElement {
 			case "strict": return strict(value);
 			default:
 				if (extra == null)
-					extra = new LinkedHashMap<>();
+					extra = map();
 				extra.put(property, value);
 				return this;
 		}
diff --git a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
index 7726d43..bc96801 100644
--- a/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
+++ b/juneau-core/juneau-dto/src/main/java/org/apache/juneau/dto/swagger/ui/SwaggerUI.java
@@ -396,7 +396,7 @@ public class SwaggerUI extends ObjectSwap<Swagger,Div> {
 			return null;
 		if (s.indexOf(',') == -1)
 			return singletonList(s);
-		List<Object> l = new ArrayList<>();
+		List<Object> l = list();
 		String[] sa = s.split("\n");
 		for (int i = 0; i < sa.length; i++) {
 			if (i > 0)
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
index ef5bae9..7eafb5d 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfClassMeta.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jena;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -40,8 +42,8 @@ public class RdfClassMeta extends ExtendedClassMeta {
 	 */
 	public RdfClassMeta(ClassMeta<?> cm, RdfMetaProvider mp) {
 		super(cm);
-		List<Rdf> rdfs = new ArrayList<>();
-		List<RdfSchema> schemas = new ArrayList<>();
+		List<Rdf> rdfs = list();
+		List<RdfSchema> schemas = list();
 		cm.forEachAnnotation(Rdf.class, x -> true, x -> rdfs.add(x));
 		cm.forEachAnnotation(RdfSchema.class, x -> true, x -> schemas.add(x));
 
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
index ca79314..9b34b5f 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfParserSession.java
@@ -242,7 +242,7 @@ public class RdfParserSession extends ReaderParserSession {
 		if (isLooseCollections() && type.isCollectionOrArray()) {
 			Collection c = null;
 			if (type.isArray() || type.isArgs())
-				c = new ArrayList();
+				c = list();
 			else
 				c = (
 					type.canCreateNewInstance(getOuter())
@@ -467,7 +467,7 @@ public class RdfParserSession extends ReaderParserSession {
 			o = parseIntoMap(r, m, eType.getKeyType(), eType.getValueType(), pMeta);
 		} else if (sType.isCollectionOrArray() || sType.isArgs()) {
 			if (sType.isArray() || sType.isArgs())
-				o = new ArrayList();
+				o = list();
 			else
 				o = (sType.canCreateNewInstance(outer) ? (Collection<?>)sType.newInstance(outer) : new OList(this));
 			Resource r = n.asResource();
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
index 8d7111d..61b83e5 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializer.java
@@ -1111,7 +1111,7 @@ public class RdfSerializer extends WriterSerializer implements RdfMetaProvider {
 		@FluentSetter
 		public Builder namespaces(Namespace...values) {
 			if (namespaces == null)
-				namespaces = new ArrayList<>();
+				namespaces = list();
 			Collections.addAll(namespaces, values);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
index b9ccbd8..7338e75 100644
--- a/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
+++ b/juneau-core/juneau-marshall-rdf/src/main/java/org/apache/juneau/jena/RdfSerializerSession.java
@@ -468,7 +468,7 @@ public final class RdfSerializerSession extends WriterSerializerSession {
 
 		ClassMeta<?> keyType = type.getKeyType(), valueType = type.getValueType();
 
-		ArrayList<Map.Entry<Object,Object>> l = new ArrayList<>(m.entrySet());
+		ArrayList<Map.Entry<Object,Object>> l = listFrom(m.entrySet());
 		Collections.reverse(l);
 		for (Map.Entry<Object,Object> me : l) {
 			Object value = me.getValue();
@@ -533,7 +533,7 @@ public final class RdfSerializerSession extends WriterSerializerSession {
 
 	private RDFList serializeToList(Collection c, ClassMeta<?> type) throws IOException, SerializeException {
 		ClassMeta<?> elementType = type.getElementType();
-		List<RDFNode> l = new ArrayList<>(c.size());
+		List<RDFNode> l = list(c.size());
 		for (Object e : c) {
 			l.add(serializeAnything(e, false, elementType, null, null, null));
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
index 5303994..376ff50 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanContext.java
@@ -289,10 +289,10 @@ public class BeanContext extends Context {
 			beanConstructorVisibility = copyFrom.beanConstructorVisibility;
 			beanMethodVisibility = copyFrom.beanMethodVisibility;
 			beanFieldVisibility = copyFrom.beanFieldVisibility;
-			beanDictionary = copyFrom.beanDictionary.isEmpty() ? null : new ArrayList<>(copyFrom.beanDictionary);
-			swaps = copyFrom.swaps.isEmpty() ? null : new ArrayList<>(copyFrom.swaps);
-			notBeanClasses = copyFrom.notBeanClasses.isEmpty() ? null : classSet(copyFrom.notBeanClasses);
-			notBeanPackages = copyFrom.notBeanPackages.isEmpty() ? null : new TreeSet<>(copyFrom.notBeanPackages);
+			beanDictionary = listFrom(copyFrom.beanDictionary, true);
+			swaps = listFrom(copyFrom.swaps, true);
+			notBeanClasses = classSet(copyFrom.notBeanClasses, true);
+			notBeanPackages = sortedSetFrom(copyFrom.notBeanPackages, true);
 			disableBeansRequireSomeProperties = ! copyFrom.beansRequireSomeProperties;
 			beanMapPutReturnsOldValue = copyFrom.beanMapPutReturnsOldValue;
 			beansRequireDefaultConstructor = copyFrom.beansRequireDefaultConstructor;
@@ -327,10 +327,10 @@ public class BeanContext extends Context {
 			beanConstructorVisibility = copyFrom.beanConstructorVisibility;
 			beanMethodVisibility = copyFrom.beanMethodVisibility;
 			beanFieldVisibility = copyFrom.beanFieldVisibility;
-			beanDictionary = copyFrom.beanDictionary == null ? null : new ArrayList<>(copyFrom.beanDictionary);
-			swaps = copyFrom.swaps == null ? null : new ArrayList<>(copyFrom.swaps);
-			notBeanClasses = copyFrom.notBeanClasses == null ? null : classSet(copyFrom.notBeanClasses);
-			notBeanPackages = copyFrom.notBeanPackages == null ? null : new TreeSet<>(copyFrom.notBeanPackages);
+			beanDictionary = copyOf(copyFrom.beanDictionary);
+			swaps = copyOf(copyFrom.swaps);
+			notBeanClasses = classSet(copyFrom.notBeanClasses);
+			notBeanPackages = sortedSetFrom(copyFrom.notBeanPackages);
 			disableBeansRequireSomeProperties = copyFrom.disableBeansRequireSomeProperties;
 			beanMapPutReturnsOldValue = copyFrom.beanMapPutReturnsOldValue;
 			beansRequireDefaultConstructor = copyFrom.beansRequireDefaultConstructor;
@@ -1752,7 +1752,7 @@ public class BeanContext extends Context {
 		 */
 		public List<Class<?>> beanDictionary() {
 			if (beanDictionary == null)
-				beanDictionary = new ArrayList<>();
+				beanDictionary = list();
 			return beanDictionary;
 		}
 
@@ -3095,7 +3095,7 @@ public class BeanContext extends Context {
 		 */
 		public List<Object> swaps() {
 			if (swaps == null)
-				swaps = new ArrayList<>();
+				swaps = list();
 			return swaps;
 		}
 
@@ -3469,6 +3469,12 @@ public class BeanContext extends Context {
 		}
 
 		private static Set<Class<?>> classSet(Collection<Class<?>> copy) {
+			return classSet(copy, false);
+		}
+
+		private static Set<Class<?>> classSet(Collection<Class<?>> copy, boolean nullIfEmpty) {
+			if (copy == null || (nullIfEmpty && copy.isEmpty()))
+				return null;
 			Set<Class<?>> x = classSet();
 			x.addAll(copy);
 			return x;
@@ -4136,7 +4142,7 @@ public class BeanContext extends Context {
 	private final <T> ObjectSwap[] findObjectSwaps(Class<T> c) {
 		// Note:  On first
 		if (c != null) {
-			List<ObjectSwap> l = new ArrayList<>();
+			List<ObjectSwap> l = list();
 			for (ObjectSwap f : swapArray)
 				if (f.getNormalClass().isParentOf(c))
 					l.add(f);
@@ -4158,7 +4164,7 @@ public class BeanContext extends Context {
 		for (ObjectSwap f : swapArray) {
 			if (f.getNormalClass().isChildOf(c)) {
 				if (l == null)
-					l = new ArrayList<>();
+					l = list();
 				l.add(f);
 			}
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
index 7b3db96..c7a09f4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanFilter.java
@@ -642,7 +642,7 @@ public final class BeanFilter {
 		 */
 		public Builder dictionary(Class<?>...values) {
 			if (dictionary == null)
-				dictionary = new ArrayList<>(Arrays.asList(values));
+				dictionary = list(values);
 			else for (Class<?> cc : values)
 				dictionary.add(cc);
 			return this;
@@ -728,10 +728,10 @@ public final class BeanFilter {
 	BeanFilter(Builder builder) {
 		this.beanClass = builder.beanClass;
 		this.typeName = builder.typeName;
-		this.properties = new LinkedHashSet<>(builder.properties);
-		this.excludeProperties = new LinkedHashSet<>(builder.excludeProperties);
-		this.readOnlyProperties = new LinkedHashSet<>(builder.readOnlyProperties);
-		this.writeOnlyProperties = new LinkedHashSet<>(builder.writeOnlyProperties);
+		this.properties = copyOf(builder.properties);
+		this.excludeProperties = copyOf(builder.excludeProperties);
+		this.readOnlyProperties = copyOf(builder.readOnlyProperties);
+		this.writeOnlyProperties = copyOf(builder.writeOnlyProperties);
 		this.example = builder.example;
 		this.implClass = builder.implClass;
 		this.interfaceClass = builder.interfaceClass;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
index 631ddf4..d256259 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMap.java
@@ -13,6 +13,7 @@
 package org.apache.juneau;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -428,7 +429,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	public Set<String> keySet() {
 		if (meta.dynaProperty == null)
 			return meta.properties.keySet();
-		Set<String> l = new LinkedHashSet<>();
+		Set<String> l = set();
 		for (String p : meta.properties.keySet())
 			if (! "*".equals(p))
 				l.add(p);
@@ -508,7 +509,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 	public List<BeanPropertyValue> getValues(boolean keepNulls, BeanPropertyValue...prependVals) {
 		Collection<BeanPropertyMeta> properties = getProperties();
 		int capacity = ((! keepNulls) && properties.size() > 10) ? 10 : properties.size() + prependVals.length;
-		List<BeanPropertyValue> l = new ArrayList<>(capacity);
+		List<BeanPropertyValue> l = list(capacity);
 		for (BeanPropertyValue v : prependVals)
 			if (v != null)
 				l.add(v);
@@ -573,7 +574,7 @@ public class BeanMap<T> extends AbstractMap<String,Object> implements Delegate<T
 		// If this bean has a dyna-property, then we need to construct the entire set before returning.
 		// Otherwise, we can create an iterator without a new data structure.
 		if (meta.dynaProperty != null) {
-			Set<Entry<String,Object>> s = new LinkedHashSet<>();
+			Set<Entry<String,Object>> s = set();
 			for (BeanPropertyMeta pMeta : getProperties()) {
 				if (pMeta.isDyna()) {
 					try {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
index a47e74e..5b8320a 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanMeta.java
@@ -197,7 +197,7 @@ public class BeanMeta<T> {
 				if (stopClass == null)
 					stopClass = Object.class;
 
-				Map<String,BeanPropertyMeta.Builder> normalProps = new LinkedHashMap<>();
+				Map<String,BeanPropertyMeta.Builder> normalProps = map();
 
 				boolean hasBean = ci.hasAnnotation(ctx, Bean.class);
 				boolean hasBeanIgnore = ci.hasAnnotation(ctx, BeanIgnore.class);
@@ -280,13 +280,13 @@ public class BeanMeta<T> {
 					constructor.setAccessible();
 
 				// Explicitly defined property names in @Bean annotation.
-				Set<String> fixedBeanProps = new LinkedHashSet<>();
-				Set<String> bpi = new LinkedHashSet<>();
-				Set<String> bpx = new LinkedHashSet<>();
-				Set<String> bpro = new LinkedHashSet<>();
-				Set<String> bpwo = new LinkedHashSet<>();
+				Set<String> fixedBeanProps = set();
+				Set<String> bpi = set();
+				Set<String> bpx = set();
+				Set<String> bpro = set();
+				Set<String> bpwo = set();
 
-				Set<String> filterProps = new HashSet<>();  // Names of properties defined in @Bean(properties)
+				Set<String> filterProps = set();  // Names of properties defined in @Bean(properties)
 
 				if (beanFilter != null) {
 
@@ -429,10 +429,7 @@ public class BeanMeta<T> {
 
 				sortProperties = (ctx.isSortProperties() || (beanFilter != null && beanFilter.isSortProperties())) && fixedBeanProps.isEmpty();
 
-				if (sortProperties)
-					properties = new TreeMap<>();
-				else
-					properties = new LinkedHashMap<>();
+				properties = sortProperties ? sortedMap() : map();
 
 				if (beanFilter != null && beanFilter.getTypeName() != null)
 					dictionaryName = beanFilter.getTypeName();
@@ -456,7 +453,7 @@ public class BeanMeta<T> {
 					if (bpi.isEmpty() && ! bfbpi.isEmpty()) {
 						// Only include specified properties if BeanFilter.includeKeys is specified.
 						// Note that the order must match includeKeys.
-						Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();
+						Map<String,BeanPropertyMeta> properties2 = map();
 						for (String k : bfbpi) {
 							if (properties.containsKey(k))
 								properties2.put(k, properties.remove(k));
@@ -472,7 +469,7 @@ public class BeanMeta<T> {
 				}
 
 				if (! bpi.isEmpty()) {
-					Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();
+					Map<String,BeanPropertyMeta> properties2 = map();
 					for (String k : bpi) {
 						if (properties.containsKey(k))
 							properties2.put(k, properties.remove(k));
@@ -485,7 +482,7 @@ public class BeanMeta<T> {
 					hiddenProperties.put(ep, properties.remove(ep));
 
 				if (pNames != null) {
-					Map<String,BeanPropertyMeta> properties2 = new LinkedHashMap<>();
+					Map<String,BeanPropertyMeta> properties2 = map();
 					for (String k : pNames) {
 						if (properties.containsKey(k))
 							properties2.put(k, properties.get(k));
@@ -530,8 +527,8 @@ public class BeanMeta<T> {
 		 * Returns null if the field isn't a valid property.
 		 */
 		private String findPropertyName(Field f) {
-			List<Beanp> lp = new ArrayList<>();
-			List<Name> ln = new ArrayList<>();
+			List<Beanp> lp = list();
+			List<Name> ln = list();
 			ctx.forEachAnnotation(Beanp.class, f, x -> true, x -> lp.add(x));
 			ctx.forEachAnnotation(Name.class, f, x -> true, x -> ln.add(x));
 			String name = bpName(lp, ln);
@@ -666,8 +663,8 @@ public class BeanMeta<T> {
 				if (t != null && t.value())
 					continue;
 
-				List<Beanp> lp = new ArrayList<>();
-				List<Name> ln = new ArrayList<>();
+				List<Beanp> lp = list();
+				List<Name> ln = list();
 				ctx.forEachAnnotation(Beanp.class, m.inner(), x -> true, x -> lp.add(x));
 				ctx.forEachAnnotation(Name.class, m.inner(), x -> true, x -> ln.add(x));
 				if (! (m.isVisible(v) || lp.size() > 0 || ln.size() > 0))
@@ -824,7 +821,7 @@ public class BeanMeta<T> {
 	public Collection<BeanPropertyMeta> getPropertyMetas(final String...pNames) {
 		if (pNames == null)
 			return getPropertyMetas();
-		List<BeanPropertyMeta> l = new ArrayList<>(pNames.length);
+		List<BeanPropertyMeta> l = list(pNames.length);
 		for (int i = 0; i < pNames.length; i++)
 			l.add(getPropertyMeta(pNames[i]));
 		return l;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
index 61c0d89..b57db58 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanPropertyMeta.java
@@ -181,7 +181,7 @@ public final class BeanPropertyMeta {
 			canWrite |= (field != null || setter != null);
 
 			if (innerField != null) {
-				List<Beanp> lp = new ArrayList<>();
+				List<Beanp> lp = list();
 				bc.forEachAnnotation(Beanp.class, innerField, x -> true, x -> lp.add(x));
 				if (field != null || lp.size() > 0) {
 					// Only use field type if it's a bean property or has @Beanp annotation.
@@ -203,7 +203,7 @@ public final class BeanPropertyMeta {
 			}
 
 			if (getter != null) {
-				List<Beanp> lp = new ArrayList<>();
+				List<Beanp> lp = list();
 				bc.forEachAnnotation(Beanp.class, getter, x -> true, x -> lp.add(x));
 				if (rawTypeMeta == null)
 					rawTypeMeta = bc.resolveClassMeta(last(lp), getter.getGenericReturnType(), typeVarImpls);
@@ -221,7 +221,7 @@ public final class BeanPropertyMeta {
 			}
 
 			if (setter != null) {
-				List<Beanp> lp = new ArrayList<>();
+				List<Beanp> lp = list();
 				bc.forEachAnnotation(Beanp.class, setter, x -> true, x -> lp.add(x));
 				if (rawTypeMeta == null)
 					rawTypeMeta = bc.resolveClassMeta(last(lp), setter.getGenericParameterTypes()[0], typeVarImpls);
@@ -629,7 +629,7 @@ public final class BeanPropertyMeta {
 					return l;
 				} else if (rawTypeMeta.isCollection()) {
 					Collection c = (Collection)o;
-					List l = new ArrayList(c.size());
+					List l = list(c.size());
 					ClassMeta childType = rawTypeMeta.getElementType();
 					for (Object cc : c)
 						l.add(applyChildPropertiesFilter(session, childType, cc));
@@ -904,7 +904,7 @@ public final class BeanPropertyMeta {
 	public Map<String,Object> getDynaMap(Object bean) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException {
 		if (isDyna) {
 			if (extraKeys != null && getter != null && ! isDynaGetterMap) {
-				Map<String,Object> m = new LinkedHashMap<>();
+				Map<String,Object> m = map();
 				for (String key : (Collection<String>)extraKeys.invoke(bean))
 					m.put(key, getter.invoke(bean, key));
 				return m;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
index 23c992c..1e6a789 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/BeanSession.java
@@ -756,7 +756,7 @@ public class BeanSession extends ContextSession {
 			// Target type is some sort of Collection
 			if (to.isCollection()) {
 				try {
-					Collection l = to.canCreateNewInstance(outer) ? (Collection)to.newInstance(outer) : to.isSet() ? new LinkedHashSet<>() : new OList(this);
+					Collection l = to.canCreateNewInstance(outer) ? (Collection)to.newInstance(outer) : to.isSet() ? set() : new OList(this);
 					ClassMeta elementType = to.getElementType();
 
 					if (from.isArray())
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
index 5b3133c..61574c4 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/ClassMeta.java
@@ -323,7 +323,7 @@ public final class ClassMeta<T> implements Type {
 			stringConstructor = null;
 		Object primitiveDefault = null;
 		Map<String,Method>
-			publicMethods = new LinkedHashMap<>();
+			publicMethods = map();
 		ClassMeta<?>
 			keyType = null,
 			valueType = null,
@@ -2106,7 +2106,7 @@ public final class ClassMeta<T> implements Type {
 				info.forEachAnnotation(BeanContext.DEFAULT, type, filter, action);
 				return this;
 			}
-			List<A> l = new ArrayList<>();
+			List<A> l = list();
 			info.forEachAnnotation(beanContext, type, x-> true, x -> l.add(x));
 			array = (A[])Array.newInstance(type, l.size());
 			for (int i = 0; i < l.size(); i++)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
index 501b134..1fae783 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/Context.java
@@ -141,7 +141,7 @@ public abstract class Context implements AnnotationProvider {
 		List<Annotation> annotations;
 		Cache<HashKey,? extends Context> cache;
 
-		private final List<Object> builders = new ArrayList<>();
+		private final List<Object> builders = list();
 		private final AnnotationWorkList applied = AnnotationWorkList.create();
 
 		/**
@@ -168,7 +168,7 @@ public abstract class Context implements AnnotationProvider {
 		protected Builder(Context copyFrom) {
 			debug = copyFrom.debug;
 			type = copyFrom.getClass();
-			annotations = copyFrom.annotations.isEmpty() ? null : new ArrayList<>(copyFrom.annotations);
+			annotations = listFrom(copyFrom.annotations, true);
 			registerBuilders(this);
 		}
 
@@ -180,7 +180,7 @@ public abstract class Context implements AnnotationProvider {
 		protected Builder(Builder copyFrom) {
 			debug = copyFrom.debug;
 			type = copyFrom.type;
-			annotations = copyFrom.annotations == null ? null : new ArrayList<>(copyFrom.annotations);
+			annotations = listFrom(copyFrom.annotations, true);
 			registerBuilders(this);
 		}
 
@@ -697,7 +697,7 @@ public abstract class Context implements AnnotationProvider {
 		@FluentSetter
 		public Builder annotations(Annotation...values) {
 			if (annotations == null)
-				annotations = new ArrayList<>();
+				annotations = list();
 			Collections.addAll(annotations, values);
 			return this;
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
index 89c78be..cc68a3c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
@@ -14,6 +14,7 @@ package org.apache.juneau.assertions;
 
 import static org.apache.juneau.assertions.Assertions.*;
 import static java.util.Collections.*;
+import static org.apache.juneau.internal.CollectionUtils.list;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.io.*;
@@ -180,7 +181,7 @@ public class FluentThrowableAssertion<T extends Throwable,R> extends FluentObjec
 			if (t.getCause() == null)
 				l = singletonList(t.getMessage());
 			else {
-				l = new ArrayList<>();
+				l = list();
 				while (t != null) {
 					l.add(t.getMessage());
 					t = t.getCause();
@@ -223,7 +224,7 @@ public class FluentThrowableAssertion<T extends Throwable,R> extends FluentObjec
 			if (t.getCause() == null)
 				l = singletonList(t.getMessage());
 			else {
-				l = new ArrayList<>();
+				l = list();
 				while (t != null) {
 					l.add(t.getLocalizedMessage());
 					t = t.getCause();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
index f09843d..6464eaf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/collections/OMap.java
@@ -14,6 +14,7 @@ package org.apache.juneau.collections;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.io.*;
@@ -1924,7 +1925,7 @@ public class OMap extends LinkedHashMap<String,Object> {
 	public Set<String> keySet() {
 		if (inner == null)
 			return super.keySet();
-		LinkedHashSet<String> s = new LinkedHashSet<>();
+		LinkedHashSet<String> s = set();
 		s.addAll(inner.keySet());
 		s.addAll(super.keySet());
 		return s;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
index 388f77f..a67bc4d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/BeanStore.java
@@ -297,8 +297,8 @@ public class BeanStore {
 		readOnly = builder.readOnly;
 		threadSafe = builder.threadSafe;
 		lock = threadSafe ? new SimpleReadWriteLock() : SimpleReadWriteLock.NO_OP;
-		entries = threadSafe ? new ConcurrentLinkedDeque<>() : new LinkedList<>();
-		unnamedEntries = threadSafe ? new ConcurrentHashMap<>() : new LinkedHashMap<>();
+		entries = threadSafe ? new ConcurrentLinkedDeque<>() : linkedList();
+		unnamedEntries = threadSafe ? new ConcurrentHashMap<>() : map();
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java
index 4bd504e..d1a4d08 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultClassList.java
@@ -64,7 +64,7 @@ public class DefaultClassList {
 	 * Constructor.
 	 */
 	protected DefaultClassList() {
-		entries = new ArrayList<>();
+		entries = list();
 	}
 
 	/**
@@ -73,7 +73,7 @@ public class DefaultClassList {
 	 * @param value The object to copy.
 	 */
 	public DefaultClassList(DefaultClassList value) {
-		entries = new ArrayList<>(value.entries);
+		entries = copyOf(value.entries);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java
index 4d03d66..3af2869 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/DefaultSettingsMap.java
@@ -55,7 +55,7 @@ public class DefaultSettingsMap {
 	 * Constructor.
 	 */
 	protected DefaultSettingsMap() {
-		entries = new LinkedHashMap<>();
+		entries = map();
 	}
 
 	/**
@@ -64,7 +64,7 @@ public class DefaultSettingsMap {
 	 * @param value The object to copy.
 	 */
 	public DefaultSettingsMap(DefaultSettingsMap value) {
-		entries = new LinkedHashMap<>(value.entries);
+		entries = copyOf(value.entries);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
index d7d4139..024f08d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/FileFinder.java
@@ -135,7 +135,7 @@ public interface FileFinder {
 		 */
 		protected Builder(BeanStore beanStore) {
 			super(BasicFileFinder.class, beanStore);
-			roots = new LinkedHashSet<>();
+			roots = set();
 			cachingLimit = -1;
 			include = list(Pattern.compile(".*"));
 			exclude = list();
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
index be05b10..b4caf6f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/cp/Messages.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.cp;
 
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.internal.ResourceBundleUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
@@ -177,7 +178,7 @@ public class Messages extends ResourceBundle {
 			super(Messages.class, BeanStore.INSTANCE);
 			this.forClass = forClass;
 			this.name = forClass.getSimpleName();
-			locations = new ArrayList<>();
+			locations = list();
 			locale = Locale.getDefault();
 		}
 
@@ -403,7 +404,7 @@ public class Messages extends ResourceBundle {
 			}
 		}
 
-		this.keyMap = Collections.unmodifiableMap(new LinkedHashMap<>(keyMap));
+		this.keyMap = unmodifiable(copyOf(keyMap));
 		this.rbKeys = rb == null ? Collections.emptySet() : rb.keySet();
 	}
 
@@ -438,7 +439,7 @@ public class Messages extends ResourceBundle {
 	 * @return The set of all keys in the resource bundle with the prefix.
 	 */
 	public Set<String> keySet(String prefix) {
-		Set<String> set = new LinkedHashSet<>();
+		Set<String> set = set();
 		for (String s : keySet()) {
 			if (s.equals(prefix) || (s.startsWith(prefix) && s.charAt(prefix.length()) == '.'))
 				set.add(s);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
index ffdf693..f4bf027 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/encoders/EncoderSet.java
@@ -17,8 +17,6 @@ import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static java.util.stream.Collectors.*;
-import static java.util.Collections.*;
-
 import java.util.*;
 import java.util.concurrent.*;
 
@@ -329,7 +327,7 @@ public final class EncoderSet {
 			}
 		}
 
-		this.encodings = unmodifiableList(lc);
+		this.encodings = unmodifiable(lc);
 		this.encodingsEncoders = l.toArray(new Encoder[l.size()]);
 	}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
index 8d71f46..95b96bd 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlDocSerializer.java
@@ -275,7 +275,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> aside() {
 			if (aside == null)
-				aside = new ArrayList<>();
+				aside = list();
 			return aside;
 		}
 
@@ -353,7 +353,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> footer() {
 			if (footer == null)
-				footer = new ArrayList<>();
+				footer = list();
 			return footer;
 		}
 
@@ -394,7 +394,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> head() {
 			if (head == null)
-				head = new ArrayList<>();
+				head = list();
 			return head;
 		}
 
@@ -436,7 +436,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> header() {
 			if (header == null)
-				header = new ArrayList<>();
+				header = list();
 			return header;
 		}
 
@@ -481,7 +481,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> nav() {
 			if (nav == null)
-				nav = new ArrayList<>();
+				nav = list();
 			return nav;
 		}
 
@@ -543,7 +543,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> navlinks() {
 			if (navlinks == null)
-				navlinks = new ArrayList<>();
+				navlinks = list();
 			return navlinks;
 		}
 
@@ -634,7 +634,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> script() {
 			if (script == null)
-				script = new ArrayList<>();
+				script = list();
 			return script;
 		}
 
@@ -672,7 +672,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> style() {
 			if (style == null)
-				style = new ArrayList<>();
+				style = list();
 			return style;
 		}
 
@@ -703,7 +703,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<String> stylesheet() {
 			if (stylesheet == null)
-				stylesheet = new ArrayList<>();
+				stylesheet = list();
 			return stylesheet;
 		}
 
@@ -802,7 +802,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		 */
 		public List<Class<? extends HtmlWidget>> widgets() {
 			if (widgets == null)
-				widgets = new ArrayList<>();
+				widgets = list();
 			return widgets;
 		}
 
@@ -1571,15 +1571,15 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		//-----------------------------------------------------------------------------------------------------------------
 
 		private static <T> List<T> copy(List<T> s) {
-			return s == null || s.isEmpty() ? null : new ArrayList<>(s);
+			return s == null || s.isEmpty() ? null : copyOf(s);
 		}
 
 		private static <T> List<T> copy(T[] s) {
-			return s.length == 0 ? null : new ArrayList<>(Arrays.asList(s));
+			return s.length == 0 ? null : list(s);
 		}
 
 		private List<String> merge(List<String> old, String[] newValues) {
-			List<String> x = new ArrayList<>(newValues.length);
+			List<String> x = list(newValues.length);
 			for (String s : newValues) {
 				if ("NONE".equals(s)) {
 					if (old != null)
@@ -1595,7 +1595,7 @@ public class HtmlDocSerializer extends HtmlStrippedDocSerializer {
 		}
 
 		private List<String> mergeNavLinks(List<String> old, String[] newValues) {
-			List<String> x = new ArrayList<>(newValues.length);
+			List<String> x = list(newValues.length);
 			for (String s : newValues) {
 				if ("NONE".equals(s)) {
 					if (old != null)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
index c511356..800ab56 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlParserSession.java
@@ -398,7 +398,7 @@ public final class HtmlParserSession extends XmlParserSession {
 					o = parseTableIntoCollection(r, (Collection)(sType.canCreateNewInstance(outer)
 						? sType.newInstance(outer) : new OList(this)), sType, pMeta);
 				else if (sType.isArray() || sType.isArgs()) {
-					ArrayList l = (ArrayList)parseTableIntoCollection(r, new ArrayList(), sType, pMeta);
+					ArrayList l = (ArrayList)parseTableIntoCollection(r, list(), sType, pMeta);
 					o = toArray(sType, l);
 				}
 				else
@@ -421,7 +421,7 @@ public final class HtmlParserSession extends XmlParserSession {
 				o = parseIntoCollection(r, (Collection)(sType.canCreateNewInstance(outer)
 					? sType.newInstance(outer) : new OList(this)), sType, pMeta);
 			else if (sType.isArray() || sType.isArgs())
-				o = toArray(sType, parseIntoCollection(r, new ArrayList(), sType, pMeta));
+				o = toArray(sType, parseIntoCollection(r, list(), sType, pMeta));
 			else
 				isValid = false;
 			skipTag(r, xUL);
@@ -555,7 +555,7 @@ public final class HtmlParserSession extends XmlParserSession {
 			ClassMeta<E> type, BeanPropertyMeta pMeta) throws IOException, ParseException, ExecutableException, XMLStreamException {
 
 		HtmlTag tag = nextTag(r, TR);
-		List<String> keys = new ArrayList<>();
+		List<String> keys = list();
 		while (true) {
 			tag = nextTag(r, TH, xTR);
 			if (tag == xTR)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
index 04a27ac..9d0353b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/html/HtmlSerializerSession.java
@@ -920,7 +920,7 @@ public class HtmlSerializerSession extends XmlSerializerSession {
 		// If it's a non-bean map, only use table if all entries are also maps.
 		if (cm1.isMap() && ! cm1.isBeanMap()) {
 
-			Set<Object> set = new LinkedHashSet<>();
+			Set<Object> set = CollectionUtils.set();
 			for (Object o : c) {
 				o = swap(swap, o);
 				if (! canIgnoreValue(cm1, null, o)) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
index 151825d..dc2f570 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicCsvArrayHeader.java
@@ -14,8 +14,6 @@ package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Collections.*;
-
 import java.util.*;
 import java.util.function.*;
 
@@ -121,7 +119,7 @@ public class BasicCsvArrayHeader extends BasicHeader {
 	 */
 	public BasicCsvArrayHeader(String name, List<String> value) {
 		super(name, serialize(value));
-		this.value = value == null ? null : unmodifiableList(value);
+		this.value = unmodifiable(value);
 		this.supplier = null;
 	}
 
@@ -211,6 +209,6 @@ public class BasicCsvArrayHeader extends BasicHeader {
 	}
 
 	private List<String> parse(String value) {
-		return value == null ? null : unmodifiableList(Arrays.asList(split(value)));
+		return value == null ? null : unmodifiable(Arrays.asList(split(value)));
 	}
 }
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java
index 86535b2..bbed240 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/BasicEntityTagArrayHeader.java
@@ -14,8 +14,6 @@ package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
-import static java.util.Collections.*;
-
 import java.util.*;
 import java.util.function.*;
 
@@ -121,7 +119,8 @@ public class BasicEntityTagArrayHeader extends BasicHeader {
 	 */
 	public BasicEntityTagArrayHeader(String name, List<EntityTag> value) {
 		super(name, serialize(value));
-		this.value = value == null ? null : unmodifiableList(value);
+		int todo; // Replace with arrays.
+		this.value = unmodifiable(value);
 		this.supplier = null;
 	}
 
@@ -165,7 +164,7 @@ public class BasicEntityTagArrayHeader extends BasicHeader {
 	private List<EntityTag> parse(String value) {
 		if (value == null)
 			return null;
-		List<EntityTag> list = new ArrayList<>();
+		List<EntityTag> list = list();
 		split(value, x -> list.add(EntityTag.of(x)));
 		return list;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
index 8d060c2..eb6db7e 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/HeaderList.java
@@ -265,7 +265,7 @@ public class HeaderList {
 		 */
 		protected Builder() {
 			super(HeaderList.class, BeanStore.INSTANCE);
-			entries = new ArrayList<>();
+			entries = list();
 		}
 
 		/**
@@ -275,9 +275,7 @@ public class HeaderList {
 		 */
 		protected Builder(HeaderList copyFrom) {
 			super(copyFrom.getClass(), BeanStore.INSTANCE);
-			entries = new ArrayList<>(copyFrom.entries.length);
-			for (int i = 0; i < copyFrom.entries.length; i++)
-				entries.add(copyFrom.entries[i]);
+			entries = list(copyFrom.entries);
 			caseSensitive = copyFrom.caseSensitive;
 		}
 
@@ -288,8 +286,8 @@ public class HeaderList {
 		 */
 		protected Builder(Builder copyFrom) {
 			super(copyFrom);
-			entries = new ArrayList<>(copyFrom.entries);
-			defaultEntries = copyFrom.defaultEntries == null ? null : new ArrayList<>(copyFrom.defaultEntries);
+			entries = copyOf(copyFrom.entries);
+			defaultEntries = copyOf(copyFrom.defaultEntries);
 			varResolver = copyFrom.varResolver;
 			caseSensitive = copyFrom.caseSensitive;
 		}
@@ -772,7 +770,7 @@ public class HeaderList {
 			if (value != null) {
 				boolean replaced = false;
 				if (defaultEntries == null)
-					defaultEntries = new ArrayList<>();
+					defaultEntries = list();
 				for (int i = 0, j = defaultEntries.size(); i < j; i++) {
 					Header x = defaultEntries.get(i);
 					if (eq(x.getName(), value.getName())) {
@@ -845,7 +843,7 @@ public class HeaderList {
 
 			if (values != null) {
 				if (defaultEntries == null)
-					defaultEntries = new ArrayList<>();
+					defaultEntries = list();
 				for (int i1 = 0, j1 = values.size(); i1 < j1; i1++) {
 					Header h = values.get(i1);
 					if (h != null) {
@@ -1300,7 +1298,7 @@ public class HeaderList {
 					first = x;
 				else {
 					if (rest == null)
-						rest = new ArrayList<>();
+						rest = list();
 					rest.add(x);
 				}
 			}
@@ -1359,7 +1357,7 @@ public class HeaderList {
 					first = x;
 				else {
 					if (rest == null)
-						rest = new ArrayList<>();
+						rest = list();
 					rest.add(x);
 				}
 			}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java
index 3ed1d7e..b3d7303 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRange.java
@@ -104,7 +104,7 @@ public class MediaRange extends MediaType {
 	 * @return The optional list of extensions, never <jk>null</jk>.
 	 */
 	public List<NameValuePair> getExtensions() {
-		return Collections.unmodifiableList(Arrays.asList(extensions));
+		return unmodifiable(alist(extensions));
 	}
 
 	@Override /* Object */
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java
index f80e08c..d9ce777 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaRanges.java
@@ -218,7 +218,7 @@ public class MediaRanges {
 	 * @return The media ranges that make up this object.
 	 */
 	public List<MediaRange> getRanges() {
-		return Collections.unmodifiableList(Arrays.asList(ranges));
+		return unmodifiable(alist(ranges));
 	}
 
 	private static HeaderElement[] parse(String value) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaType.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaType.java
index 22a6cc0..4c477e9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaType.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/MediaType.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.http.header;
 
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static org.apache.juneau.http.HttpParts.*;
 
@@ -251,7 +252,7 @@ public class MediaType implements Comparable<MediaType>  {
 	 * @return An unmodifiable list of subtype fragments.  Never <jk>null</jk>.
 	 */
 	public final List<String> getSubTypes() {
-		return Collections.unmodifiableList(Arrays.asList(subTypes));
+		return unmodifiable(alist(subTypes));
 	}
 
 	/**
@@ -363,7 +364,7 @@ public class MediaType implements Comparable<MediaType>  {
 	 * @return The map of additional parameters, or an empty map if there are no parameters.
 	 */
 	public List<NameValuePair> getParameters() {
-		return Collections.unmodifiableList(Arrays.asList(parameters));
+		return unmodifiable(alist(parameters));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
index 6c3fc8c..238c09d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRange.java
@@ -137,7 +137,7 @@ public class StringRange {
 	 * @return The optional list of extensions, never <jk>null</jk>.
 	 */
 	public List<NameValuePair> getExtensions() {
-		return Collections.unmodifiableList(Arrays.asList(extensions));
+		return unmodifiable(alist(extensions));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java
index 88ec4e6..f2e4938 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/StringRanges.java
@@ -200,7 +200,7 @@ public class StringRanges {
 	 * @return The string ranges that make up this object.
 	 */
 	public List<StringRange> getRanges() {
-		return Collections.unmodifiableList(Arrays.asList(ranges));
+		return unmodifiable(alist(ranges));
 	}
 
 	private static HeaderElement[] parse(String value) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java
index 0644d21..bd8027f 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/header/Thrown.java
@@ -15,7 +15,6 @@ package org.apache.juneau.http.header;
 import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ClassUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
-import static java.util.Collections.*;
 import static java.util.stream.Collectors.*;
 
 import java.util.*;
@@ -110,9 +109,9 @@ public class Thrown extends BasicCsvArrayHeader {
 	 */
 	public Thrown(String value) {
 		super(NAME, value);
-		List<Part> l = new ArrayList<>();
+		List<Part> l = list();
 		split(value, x -> l.add(new Part(x)));
-		this.value = value == null ? null : unmodifiableList(l);
+		this.value = value == null ? null : unmodifiable(l);
 	}
 
 	/**
@@ -123,7 +122,7 @@ public class Thrown extends BasicCsvArrayHeader {
 	 */
 	public Thrown(List<Part> value) {
 		super(NAME, join(value, ", "));
-		this.value = value == null ? null : unmodifiableList(value);
+		this.value = unmodifiable(value);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
index d21bb2a..4bd7c95 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/http/part/PartList.java
@@ -252,7 +252,7 @@ public class PartList {
 		 */
 		protected Builder() {
 			super(PartList.class);
-			entries = new ArrayList<>();
+			entries = list();
 		}
 
 		/**
@@ -262,9 +262,7 @@ public class PartList {
 		 */
 		protected Builder(PartList copyFrom) {
 			super(copyFrom.getClass());
-			entries = new ArrayList<>(copyFrom.entries.length);
-			for (int i = 0; i < copyFrom.entries.length; i++)
-				entries.add(copyFrom.entries[i]);
+			entries = list(copyFrom.entries);
 			caseInsensitive = copyFrom.caseInsensitive;
 		}
 
@@ -275,8 +273,8 @@ public class PartList {
 		 */
 		protected Builder(Builder copyFrom) {
 			super(copyFrom);
-			entries = new ArrayList<>(copyFrom.entries);
-			defaultEntries = copyFrom.defaultEntries == null ? null : new ArrayList<>(copyFrom.defaultEntries);
+			entries = copyOf(copyFrom.entries);
+			defaultEntries = copyOf(copyFrom.defaultEntries);
 			varResolver = copyFrom.varResolver;
 			caseInsensitive = copyFrom.caseInsensitive;
 		}
@@ -759,7 +757,7 @@ public class PartList {
 			if (value != null) {
 				boolean replaced = false;
 				if (defaultEntries == null)
-					defaultEntries = new ArrayList<>();
+					defaultEntries = list();
 				for (int i = 0, j = defaultEntries.size(); i < j; i++) {
 					NameValuePair x = defaultEntries.get(i);
 					if (eq(x.getName(), value.getName())) {
@@ -832,7 +830,7 @@ public class PartList {
 
 			if (values != null) {
 				if (defaultEntries == null)
-					defaultEntries = new ArrayList<>();
+					defaultEntries = list();
 				for (int i1 = 0, j1 = values.size(); i1 < j1; i1++) {
 					NameValuePair p = values.get(i1);
 					if (p != null) {
@@ -1281,7 +1279,7 @@ public class PartList {
 					first = x;
 				else {
 					if (rest == null)
-						rest = new ArrayList<>();
+						rest = list();
 					rest.add(x);
 				}
 			}
@@ -1340,7 +1338,7 @@ public class PartList {
 					first = x;
 				else {
 					if (rest == null)
-						rest = new ArrayList<>();
+						rest = list();
 					rest.add(x);
 				}
 			}
@@ -1613,7 +1611,7 @@ public class PartList {
 	 * @return The contents of this list as an unmodifiable list of {@link NameValuePair} objects.
 	 */
 	public List<NameValuePair> asNameValuePairs() {
-		return Collections.unmodifiableList(Arrays.asList(entries));
+		return unmodifiable(alist(entries));
 	}
 
 	private boolean eq(String s1, String s2) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
index 3341272..4b44105 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/HttpPartSchema.java
@@ -2960,7 +2960,7 @@ public class HttpPartSchema {
 		public Builder property(String key, Builder value) {
 			if ( key != null && value != null) {
 				if (properties == null)
-					properties = new LinkedHashMap<>();
+					properties = map();
 				properties.put(key, value);
 			}
 			return this;
@@ -2985,7 +2985,7 @@ public class HttpPartSchema {
 		public Builder property(String key, HttpPartSchema value) {
 			if ( key != null && value != null) {
 				if (properties == null)
-					properties = new LinkedHashMap<>();
+					properties = map();
 				properties.put(key, value);
 			}
 			return this;
@@ -3291,7 +3291,7 @@ public class HttpPartSchema {
 			return;
 
 		// Validation.
-		List<String> errors = new ArrayList<>();
+		List<String> errors = list();
 		ListBuilder<String> notAllowed = listBuilder(String.class);
 		boolean invalidFormat = false;
 		switch (type) {
@@ -4017,18 +4017,18 @@ public class HttpPartSchema {
 	}
 
 	private static <T> Set<T> copy(Set<T> in) {
-		return in == null ? Collections.emptySet() : unmodifiableSet(new LinkedHashSet<>(in));
+		return in == null ? emptySet() : unmodifiable(copyOf(in));
 	}
 
 	private static Map<String,HttpPartSchema> build(Map<String,Object> in, boolean noValidate) {
 		if (in == null)
 			return null;
-		Map<String,HttpPartSchema> m = new LinkedHashMap<>();
+		Map<String,HttpPartSchema> m = map();
 		for (Map.Entry<String,Object> e : in.entrySet()) {
 			Object v = e.getValue();
 			m.put(e.getKey(), build(v, noValidate));
 		}
-		return unmodifiableMap(m);
+		return unmodifiable(m);
 	}
 
 	private static HttpPartSchema build(Object in, boolean noValidate) {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
index df343c3..2f0149c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/RequestBeanMeta.java
@@ -75,10 +75,10 @@ public class RequestBeanMeta {
 		this.cm = b.cm;
 		this.serializer = b.serializer.orElse(null);
 		this.parser = b.parser.orElse(null);
-		Map<String,RequestBeanPropertyMeta> properties = new LinkedHashMap<>();
+		Map<String,RequestBeanPropertyMeta> properties = map();
 		for (Map.Entry<String,RequestBeanPropertyMeta.Builder> e : b.properties.entrySet())
 			properties.put(e.getKey(), e.getValue().build(serializer, parser));
-		this.properties = Collections.unmodifiableMap(properties);
+		this.properties = unmodifiable(properties);
 	}
 
 	static class Builder {
@@ -86,7 +86,7 @@ public class RequestBeanMeta {
 		AnnotationWorkList annotations;
 		BeanCreator<HttpPartSerializer> serializer = BeanCreator.of(HttpPartSerializer.class);
 		BeanCreator<HttpPartParser> parser = BeanCreator.of(HttpPartParser.class);
-		Map<String,RequestBeanPropertyMeta.Builder> properties = new LinkedHashMap<>();
+		Map<String,RequestBeanPropertyMeta.Builder> properties = map();
 
 		Builder(AnnotationWorkList annotations) {
 			this.annotations = annotations;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
index 557b9d8..16c450d 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/httppart/bean/ResponseBeanMeta.java
@@ -115,15 +115,15 @@ public class ResponseBeanMeta {
 		this.partParser = optional(b.partParser).map(x -> HttpPartParser.creator().type(x).apply(b.annotations).create());
 		this.schema = b.schema.build();
 
-		Map<String,ResponseBeanPropertyMeta> properties = new LinkedHashMap<>();
+		Map<String,ResponseBeanPropertyMeta> properties = map();
 
-		Map<String,ResponseBeanPropertyMeta> hm = new LinkedHashMap<>();
+		Map<String,ResponseBeanPropertyMeta> hm = map();
 		for (Map.Entry<String,ResponseBeanPropertyMeta.Builder> e : b.headerMethods.entrySet()) {
 			ResponseBeanPropertyMeta pm = e.getValue().build(partSerializer, partParser);
 			hm.put(e.getKey(), pm);
 			properties.put(pm.getGetter().getName(), pm);
 		}
-		this.headerMethods = Collections.unmodifiableMap(hm);
+		this.headerMethods = unmodifiable(hm);
 
 		this.bodyMethod = b.bodyMethod == null ? null : b.bodyMethod.schema(schema).build(partSerializer, partParser);
 		this.statusMethod = b.statusMethod == null ? null : b.statusMethod.build(empty(), empty());
@@ -133,7 +133,7 @@ public class ResponseBeanMeta {
 		if (statusMethod != null)
 			properties.put(statusMethod.getGetter().getName(), statusMethod);
 
-		this.properties = Collections.unmodifiableMap(properties);
+		this.properties = unmodifiable(properties);
 	}
 
 	static class Builder {
@@ -144,7 +144,7 @@ public class ResponseBeanMeta {
 		Class<? extends HttpPartParser> partParser;
 		HttpPartSchema.Builder schema = HttpPartSchema.create();
 
-		Map<String,ResponseBeanPropertyMeta.Builder> headerMethods = new LinkedHashMap<>();
+		Map<String,ResponseBeanPropertyMeta.Builder> headerMethods = map();
 		ResponseBeanPropertyMeta.Builder bodyMethod;
 		ResponseBeanPropertyMeta.Builder statusMethod;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
index 87bbd6c..f552407 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/CollectionUtils.java
@@ -143,6 +143,30 @@ public final class CollectionUtils {
 	}
 
 	/**
+	 * Convenience method for creating an {@link ArrayList} of the specified size.
+	 *
+	 * @param size The initial size of the list.
+	 * @return A new modifiable list.
+	 */
+	public static <T> ArrayList<T> list(int size) {
+		return new ArrayList<>(size);
+	}
+
+	/**
+	 * Convenience method for creating a {@link LinkedList}.
+	 *
+	 * @param values The values to initialize the list with.
+	 * @return A new modifiable list.
+	 */
+	@SafeVarargs
+	public static <T> LinkedList<T> linkedList(T...values) {
+		LinkedList<T> l = new LinkedList<>();
+		for (T v : values)
+			l.add(v);
+		return l;
+	}
+
+	/**
 	 * Convenience method for creating an array-backed list by calling {@link Arrays#asList(Object...)}.
 	 *
 	 * @param values The values to initialize the list with.
@@ -160,8 +184,31 @@ public final class CollectionUtils {
 	 * @return A new modifiable list.
 	 */
 	public static <T> ArrayList<T> listFrom(Collection<T> value) {
+		return listFrom(value, false);
+	}
+
+	/**
+	 * Creates an {@link ArrayList} copy from a collection.
+	 *
+	 * @param value The collection to copy from.
+	 * @return A new modifiable list.
+	 */
+	public static <K,V> LinkedHashMap<K,V> mapFrom(Map<K,V> value) {
 		if (value == null)
 			return null;
+		return new LinkedHashMap<>(value);
+	}
+
+	/**
+	 * Creates an {@link ArrayList} copy from a collection.
+	 *
+	 * @param value The collection to copy from.
+	 * @param nullIfEmpty If <jk>true</jk> will return <jk>null</jk> if the collection is empty.
+	 * @return A new modifiable list.
+	 */
+	public static <T> ArrayList<T> listFrom(Collection<T> value, boolean nullIfEmpty) {
+		if (value == null || (nullIfEmpty && value.isEmpty()))
+			return null;
 		ArrayList<T> l = new ArrayList<>();
 		value.forEach(x -> l.add(x));
 		return l;
@@ -218,6 +265,35 @@ public final class CollectionUtils {
 	}
 
 	/**
+	 * Creates a new {@link TreeSet} from the specified collection.
+	 *
+	 * @param value The value to copy from.
+	 * @return A new {@link TreeSet}, or <jk>null</jk> if the input was null.
+	 */
+	public static <T> TreeSet<T> sortedSetFrom(Collection<T> value) {
+		if (value == null)
+			return null;
+		TreeSet<T> l = new TreeSet<>();
+		value.forEach(x -> l.add(x));
+		return l;
+	}
+
+	/**
+	 * Creates a new {@link TreeSet} from the specified collection.
+	 *
+	 * @param value The value to copy from.
+	 * @param nullIfEmpty If <jk>true</jk> returns <jk>null</jk> if the collection is empty.
+	 * @return A new {@link TreeSet}, or <jk>null</jk> if the input was null.
+	 */
+	public static <T> TreeSet<T> sortedSetFrom(Collection<T> value, boolean nullIfEmpty) {
+		if (value == null || (nullIfEmpty && value.isEmpty()))
+			return null;
+		TreeSet<T> l = new TreeSet<>();
+		value.forEach(x -> l.add(x));
+		return l;
+	}
+
+	/**
 	 * Convenience method for creating a {@link LinkedHashMap}.
 	 *
 	 * @return A new modifiable map.
@@ -276,6 +352,15 @@ public final class CollectionUtils {
 	}
 
 	/**
+	 * Convenience method for creating a {@link TreeMap}.
+	 *
+	 * @return A new modifiable set.
+	 */
+	public static <K,V> TreeMap<K,V> sortedMap() {
+		return new TreeMap<>();
+	}
+
+	/**
 	 * Convenience method for copying a list.
 	 *
 	 * @param value The list to copy.
@@ -356,6 +441,36 @@ public final class CollectionUtils {
 	}
 
 	/**
+	 * Wraps the specified list in {@link Collections#unmodifiableList(List)}.
+	 *
+	 * @param value The list to wrap.
+	 * @return The wrapped list.
+	 */
+	public static <T> List<T> synced(List<T> value) {
+		return value == null ? null: Collections.synchronizedList(value);
+	}
+
+	/**
+	 * Wraps the specified set in {@link Collections#unmodifiableSet(Set)}.
+	 *
+	 * @param value The set to wrap.
+	 * @return The wrapped set.
+	 */
+	public static <T> Set<T> synced(Set<T> value) {
+		return value == null ? null: Collections.synchronizedSet(value);
+	}
+
+	/**
+	 * Wraps the specified map in {@link Collections#unmodifiableMap(Map)}.
+	 *
+	 * @param value The map to wrap.
+	 * @return The wrapped map.
+	 */
+	public static <K,V> Map<K,V> synced(Map<K,V> value) {
+		return value == null ? null: Collections.synchronizedMap(value);
+	}
+
+	/**
 	 * Converts the specified collection to an array.
 	 *
 	 * @param value The collection to convert.
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
index eb62b45..6aeb785 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/DelegateBeanMap.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.internal;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -33,7 +35,7 @@ import org.apache.juneau.collections.*;
  */
 public class DelegateBeanMap<T> extends BeanMap<T> {
 
-	private Set<String> keys = new LinkedHashSet<>();
+	private Set<String> keys = set();
 	private OMap overrideValues = new OMap();
 
 	/**
@@ -104,7 +106,7 @@ public class DelegateBeanMap<T> extends BeanMap<T> {
 
 	@Override /* Map */
 	public synchronized Set<Entry<String,Object>> entrySet() {
-		Set<Entry<String,Object>> s = Collections.newSetFromMap(new LinkedHashMap<Map.Entry<String,Object>,Boolean>());
+		Set<Entry<String,Object>> s = set();
 		for (final String key : keys) {
 			BeanMapEntry bme;
 			if (overrideValues.containsKey(key))
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java
index edc738b..f3a36af 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/ListBuilder.java
@@ -15,6 +15,7 @@ package org.apache.juneau.internal;
 import static org.apache.juneau.internal.ConverterUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static java.util.Collections.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -96,7 +97,7 @@ public final class ListBuilder<E> {
 			if (comparator != null)
 				Collections.sort(list, comparator);
 			if (unmodifiable)
-				list = Collections.unmodifiableList(list);
+				list = unmodifiableList(list);
 		}
  		return list;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java
index 624254d..74a6631 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/internal/SetBuilder.java
@@ -15,6 +15,7 @@ package org.apache.juneau.internal;
 import static org.apache.juneau.internal.ConverterUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
+import static java.util.Collections.*;
 
 import java.lang.reflect.*;
 import java.util.*;
@@ -79,7 +80,7 @@ public final class SetBuilder<E> {
 				set = s;
 			}
 			if (unmodifiable)
-				set = Collections.unmodifiableSet(set);
+				set = unmodifiableSet(set);
 		}
 		return set;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
index 03e44cf..7a527e9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonParserSession.java
@@ -361,7 +361,7 @@ public final class JsonParserSession extends ReaderParserSession {
 				parseIntoMap2(r, m, string(), object(), pMeta);
 				o = cast(m, pMeta, eType);
 			} else {
-				ArrayList l = (ArrayList)parseIntoCollection2(r, new ArrayList(), sType, pMeta);
+				ArrayList l = (ArrayList)parseIntoCollection2(r, list(), sType, pMeta);
 				o = toArray(sType, l);
 			}
 		} else if (c == '{') {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
index cbafc6f..69a8089 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGenerator.java
@@ -14,6 +14,7 @@ package org.apache.juneau.jsonschema;
 
 import static org.apache.juneau.collections.OMap.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 import static java.util.Collections.*;
 
@@ -879,7 +880,7 @@ public class JsonSchemaGenerator extends BeanTraverseContext implements JsonSche
 		addDescriptionsTo = builder.addDescriptionsTo == null ? emptySet() : new TreeSet<>(builder.addDescriptionsTo);
 		ignoreTypes = builder.ignoreTypes == null ? emptySet() : new TreeSet<>(builder.ignoreTypes);
 
-		Set<Pattern> ignoreTypePatterns = new LinkedHashSet<>();
+		Set<Pattern> ignoreTypePatterns = set();
 		ignoreTypes.forEach(y -> split(y, x -> ignoreTypePatterns.add(Pattern.compile(x.replace(".", "\\.").replace("*", ".*")))));
 		this.ignoreTypePatterns = ignoreTypePatterns;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
index 3fe83d1..df6190c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/jsonschema/JsonSchemaGeneratorSession.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.jsonschema;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.jsonschema.TypeCategory.*;
 
 import java.lang.reflect.*;
@@ -377,7 +378,7 @@ public class JsonSchemaGeneratorSession extends BeanTraverseSession {
 
 	@SuppressWarnings("unchecked")
 	private List<String> getEnums(ClassMeta<?> cm) {
-		List<String> l = new ArrayList<>();
+		List<String> l = list();
 		for (Enum<?> e : ((Class<Enum<?>>)cm.getInnerClass()).getEnumConstants())
 			l.add(cm.toString(e));
 		return l;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
index b9b7b16..1941d26 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/msgpack/MsgPackSerializerSession.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.msgpack;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 
 import java.io.*;
@@ -310,7 +311,7 @@ public final class MsgPackSerializerSession extends OutputStreamSerializerSessio
 
 		// The map size may change as we're iterating over it, so
 		// grab a snapshot of the entries in a separate list.
-		List<SimpleMapEntry> entries = new ArrayList<>(m.size());
+		List<SimpleMapEntry> entries = list(m.size());
 		for (Map.Entry e : (Set<Map.Entry>)m.entrySet())
 			entries.add(new SimpleMapEntry(e.getKey(), e.getValue()));
 
@@ -380,7 +381,7 @@ public final class MsgPackSerializerSession extends OutputStreamSerializerSessio
 	private void serializeCollection(MsgPackOutputStream out, Collection c, ClassMeta<?> type) throws IOException, SerializeException {
 
 		ClassMeta<?> elementType = type.getElementType();
-		List<Object> l = new ArrayList<>(c.size());
+		List<Object> l = list(c.size());
 
 		c = sort(c);
 		l.addAll(c);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
index 590f012..48bb5eb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/ParserSet.java
@@ -264,7 +264,7 @@ public final class ParserSet {
 		 * @throws IllegalArgumentException If one or more values do not extend from {@link Parser}.
 		 */
 		public Builder add(Class<?>...values) {
-			List<Object> l = new ArrayList<>();
+			List<Object> l = list();
 			for (Class<?> v : values)
 				if (v.getSimpleName().equals("NoInherit"))
 					clear();
@@ -304,7 +304,7 @@ public final class ParserSet {
 		 * @throws IllegalArgumentException If one or more values do not extend from {@link Parser} or named <js>"Inherit"</js>.
 		 */
 		public Builder set(Class<?>...values) {
-			List<Object> l = new ArrayList<>();
+			List<Object> l = list();
 			for (Class<?> v : values) {
 				if (v.getSimpleName().equals("Inherit")) {
 					l.addAll(entries);
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Position.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Position.java
index e4dace3..29a73ad 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Position.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/parser/Position.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.parser;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.internal.*;
@@ -55,7 +57,7 @@ public class Position {
 
 	@Override /* Object */
 	public String toString() {
-		List<String> l = new ArrayList<>();
+		List<String> l = list();
 		if (line != -1)
 			l.add("line " + line);
 		if (column != -1)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSearcher.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSearcher.java
index 157acfc..2849ea9 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSearcher.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSearcher.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.lang.reflect.*;
@@ -71,7 +72,7 @@ public final class PojoSearcher implements PojoTool<SearchArgs> {
 
 		if (type.isCollection()) {
 			Collection c = (Collection)input;
-			l = new ArrayList<>(c.size());
+			l = list(c.size());
 			for (Object o : c) {
 				if (rowMatcher.matches(o))
 					l.add(o);
@@ -79,7 +80,7 @@ public final class PojoSearcher implements PojoTool<SearchArgs> {
 
 		} else /* isArray */ {
 			int size = Array.getLength(input);
-			l = new ArrayList<>(size);
+			l = list(size);
 			for (int i = 0; i < size; i++) {
 				Object o = Array.get(input, i);
 				if (rowMatcher.matches(o))
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSorter.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSorter.java
index 1e39364..4a42af2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSorter.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoSorter.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.reflect.*;
 import java.util.*;
 
@@ -51,18 +53,18 @@ public final class PojoSorter implements PojoTool<SortArgs> {
 
 		if (type.isArray()) {
 			int size = Array.getLength(input);
-			l = new ArrayList<>(size);
+			l = list(size);
 			for (int i = 0; i < size; i++)
 				l.add(new SortEntry(session, Array.get(input, i)));
 		} else /* isCollection() */ {
 			Collection c = (Collection)input;
-			l = new ArrayList<>(c.size());
+			l = list(c.size());
 			for (Object o : c)
 				l.add(new SortEntry(session, o));
 		}
 
 		// We reverse the list and sort last to first.
-		List<String> columns = new ArrayList<>(sort.keySet());
+		List<String> columns = listFrom(sort.keySet());
 		Collections.reverse(columns);
 
 		for (final String c : columns) {
@@ -72,9 +74,8 @@ public final class PojoSorter implements PojoTool<SortArgs> {
 			Collections.sort(l);
 		}
 
-		ArrayList<Object> l2 = new ArrayList<>(l.size());
-		for (SortEntry se : l)
-			l2.add(se.o);
+		List<Object> l2 = list(l.size());
+		l.forEach(x -> l2.add(x.o));
 
 		return l2;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoViewer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoViewer.java
index e147174..739d640 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoViewer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/PojoViewer.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.lang.reflect.*;
 import java.util.*;
 
@@ -53,12 +55,12 @@ public final class PojoViewer implements PojoTool<ViewArgs> {
 
 		if (type.isArray()) {
 			int size = Array.getLength(input);
-			l = new ArrayList<>(size);
+			l = list(size);
 			for (int i = 0; i < size; i++)
 				l.add(Array.get(input, i));
 		} else if (type.isCollection()) {
 			Collection c = (Collection)input;
-			l = new ArrayList<>(c.size());
+			l = list(c.size());
 			for (Object o : c)
 				l.add(o);
 		} else {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java
index 79d95b9..80540bb 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SearchArgs.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -29,7 +30,7 @@ import org.apache.juneau.internal.*;
  */
 public class SearchArgs {
 
-	private final Map<String,String> search = new LinkedHashMap<>();
+	private final Map<String,String> search = map();
 
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SortArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SortArgs.java
index 8f4996a..25816df 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SortArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/SortArgs.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
-import static java.util.Collections.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -59,7 +59,7 @@ public class SortArgs {
 	 * 	</ul>
 	 */
 	public SortArgs(Collection<String> sortArgs) {
-		Map<String,Boolean> sort = new LinkedHashMap<>();
+		Map<String,Boolean> sort = map();
 		for (String s : sortArgs) {
 			boolean isDesc = false;
 			if (endsWith(s, '-', '+')) {
@@ -68,7 +68,7 @@ public class SortArgs {
 			}
 			sort.put(s, isDesc);
 		}
-		this.sort = unmodifiableMap(sort);
+		this.sort = unmodifiable(sort);
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/ViewArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/ViewArgs.java
index e9149e7..2aeaedf 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/ViewArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/pojotools/ViewArgs.java
@@ -12,7 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.pojotools;
 
-import static java.util.Collections.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -48,7 +48,7 @@ public class ViewArgs {
 	 * 	<br>Values are column names.
 	 */
 	public ViewArgs(Collection<String> viewArgs) {
-		this.view = unmodifiableList(new ArrayList<>(viewArgs));
+		this.view = unmodifiable(listFrom(viewArgs));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
index f7cef84..153d7b1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/ClassInfo.java
@@ -366,7 +366,7 @@ public final class ClassInfo {
 	/** Results are in child-to-parent order. */
 	synchronized ClassInfo[] _getInterfaces() {
 		if (interfaces == null) {
-			Set<ClassInfo> s = new LinkedHashSet<>();
+			Set<ClassInfo> s = set();
 			for (ClassInfo ci : _getParents())
 				for (ClassInfo ci2 : ci._getDeclaredInterfaces()) {
 					s.add(ci2);
@@ -393,7 +393,7 @@ public final class ClassInfo {
 	/** Results are in child-to-parent order. */
 	synchronized ClassInfo[] _getParents() {
 		if (parents == null) {
-			List<ClassInfo> l = new ArrayList<>();
+			List<ClassInfo> l = list();
 			Class<?> pc = c;
 			while (pc != null && pc != Object.class) {
 				l.add(of(pc));
@@ -567,7 +567,7 @@ public final class ClassInfo {
 		if (publicMethods == null) {
 			synchronized(this) {
 				Method[] mm = c == null ? new Method[0] : c.getMethods();
-				List<MethodInfo> l = new ArrayList<>(mm.length);
+				List<MethodInfo> l = list(mm.length);
 				for (Method m : mm)
 					if (m.getDeclaringClass() != Object.class)
 						l.add(getMethodInfo(m));
@@ -582,7 +582,7 @@ public final class ClassInfo {
 		if (declaredMethods == null) {
 			synchronized(this) {
 				Method[] mm = c == null ? new Method[0] : c.getDeclaredMethods();
-				List<MethodInfo> l = new ArrayList<>(mm.length);
+				List<MethodInfo> l = list(mm.length);
 				for (Method m : mm)
 					if (! "$jacocoInit".equals(m.getName())) // Jacoco adds its own simulated methods.
 						l.add(getMethodInfo(m));
@@ -596,7 +596,7 @@ public final class ClassInfo {
 	private synchronized MethodInfo[] _getAllMethods() {
 		if (allMethods == null) {
 			synchronized(this) {
-				List<MethodInfo> l = new ArrayList<>();
+				List<MethodInfo> l = list();
 				for (ClassInfo c : _getAllParents())
 					c._appendDeclaredMethods(l);
 				allMethods = l.toArray(new MethodInfo[l.size()]);
@@ -608,7 +608,7 @@ public final class ClassInfo {
 	private synchronized MethodInfo[] _getAllMethodsParentFirst() {
 		if (allMethodsParentFirst == null) {
 			synchronized(this) {
-				List<MethodInfo> l = new ArrayList<>();
+				List<MethodInfo> l = list();
 				ClassInfo[] parents = _getAllParents();
 				for (int i = parents.length-1; i >=0; i--)
 					parents[i]._appendDeclaredMethods(l);
@@ -704,7 +704,7 @@ public final class ClassInfo {
 		if (publicConstructors == null) {
 			synchronized(this) {
 				Constructor<?>[] cc = c == null ? new Constructor[0] : c.getConstructors();
-				List<ConstructorInfo> l = new ArrayList<>(cc.length);
+				List<ConstructorInfo> l = list(cc.length);
 				for (Constructor<?> ccc : cc)
 					l.add(getConstructorInfo(ccc));
 				l.sort(null);
@@ -718,7 +718,7 @@ public final class ClassInfo {
 		if (declaredConstructors == null) {
 			synchronized(this) {
 				Constructor<?>[] cc = c == null ? new Constructor[0] : c.getDeclaredConstructors();
-				List<ConstructorInfo> l = new ArrayList<>(cc.length);
+				List<ConstructorInfo> l = list(cc.length);
 				for (Constructor<?> ccc : cc)
 					l.add(getConstructorInfo(ccc));
 				l.sort(null);
@@ -869,7 +869,7 @@ public final class ClassInfo {
 	private FieldInfo[] _getPublicFields() {
 		if (publicFields == null) {
 			synchronized(this) {
-				Map<String,FieldInfo> m = new LinkedHashMap<>();
+				Map<String,FieldInfo> m = map();
 				for (ClassInfo c : _getParents()) {
 					for (FieldInfo f : c._getDeclaredFields()) {
 						String fn = f.getName();
@@ -877,7 +877,7 @@ public final class ClassInfo {
 							m.put(f.getName(), f);
 					}
 				}
-				List<FieldInfo> l = new ArrayList<>(m.values());
+				List<FieldInfo> l = listFrom(m.values());
 				l.sort(null);
 				publicFields = l.toArray(new FieldInfo[l.size()]);
 			}
@@ -889,7 +889,7 @@ public final class ClassInfo {
 		if (declaredFields == null) {
 			synchronized(this) {
 				Field[] ff = c == null ? new Field[0] : c.getDeclaredFields();
-				List<FieldInfo> l = new ArrayList<>(ff.length);
+				List<FieldInfo> l = list(ff.length);
 				for (Field f : ff)
 					if (! "$jacocoData".equals(f.getName()))
 						l.add(getFieldInfo(f));
@@ -903,7 +903,7 @@ public final class ClassInfo {
 	private synchronized FieldInfo[] _getAllFields() {
 		if (allFields == null) {
 			synchronized(this) {
-				List<FieldInfo> l = new ArrayList<>();
+				List<FieldInfo> l = list();
 				ClassInfo[] parents = _getAllParents();
 				for (int i = parents.length-1; i >=0; i--)
 					for (FieldInfo f : parents[i]._getDeclaredFields())
@@ -939,7 +939,7 @@ public final class ClassInfo {
 	 * @return The matching annotations.
 	 */
 	public <A extends Annotation> List<A> getAnnotations(AnnotationProvider annotationProvider, Class<A> type) {
-		List<A> l = new ArrayList<>();
+		List<A> l = list();
 		forEachAnnotation(annotationProvider, type, x-> true, x -> l.add(x));
 		return l;
 	}
@@ -1608,7 +1608,7 @@ public final class ClassInfo {
 	}
 
 	@SuppressWarnings("rawtypes")
-	private static final Map<Class,Object> primitiveDefaultMap = 
+	private static final Map<Class,Object> primitiveDefaultMap =
 		mapBuilder(Class.class,Object.class).unmodifiable()
 			.add(Boolean.TYPE, false)
 			.add(Character.TYPE, (char)0)
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
index a078dd0..1a88a43 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/reflect/MethodInfo.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.reflect;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ConsumerUtils.*;
 
 import java.beans.*;
@@ -199,7 +200,7 @@ public final class MethodInfo extends ExecutableInfo implements Comparable<Metho
 	private MethodInfo[] _getMatching() {
 		if (matching == null) {
 			synchronized(this) {
-				List<MethodInfo> l = findMatching(new ArrayList<>(), m, m.getDeclaringClass());
+				List<MethodInfo> l = findMatching(list(), m, m.getDeclaringClass());
 				matching = l.toArray(new MethodInfo[l.size()]);
 			}
 		}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
index 5e10fbe..5f4b90c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/serializer/SerializerSet.java
@@ -15,7 +15,6 @@ package org.apache.juneau.serializer;
 import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static java.util.Arrays.*;
-import static java.util.Collections.*;
 import static java.util.stream.Collectors.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
@@ -263,7 +262,7 @@ public final class SerializerSet {
 		 * @throws IllegalArgumentException If one or more values do not extend from {@link Serializer}.
 		 */
 		public Builder add(Class<?>...values) {
-			List<Object> l = new ArrayList<>();
+			List<Object> l = list();
 			for (Class<?> e : values) {
 				if (Serializer.class.isAssignableFrom(e)) {
 					l.add(createBuilder(e));
@@ -300,7 +299,7 @@ public final class SerializerSet {
 		 * @throws IllegalArgumentException If one or more values do not extend from {@link Serializer} or named <js>"Inherit"</js>.
 		 */
 		public Builder set(Class<?>...values) {
-			List<Object> l = new ArrayList<>();
+			List<Object> l = list();
 			for (Class<?> e : values) {
 				if (e.getSimpleName().equals("Inherit")) {
 					l.addAll(entries);
@@ -663,7 +662,7 @@ public final class SerializerSet {
 	 * @return An unmodifiable list of serializers in this group.
 	 */
 	public List<Serializer> getSerializers() {
-		return unmodifiableList(asList(entries));
+		return unmodifiable(alist(entries));
 	}
 
 	/**
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java
index fcf6835..13ee1b2 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/swaps/MatchResultSwap.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.swaps;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 import java.util.regex.*;
 
@@ -36,7 +38,7 @@ public class MatchResultSwap extends ObjectSwap<MatchResult,List<String>> {
 	 */
 	@Override /* ObjectSwap */
 	public List<String> swap(BeanSession session, MatchResult o) {
-		List<String> l = new ArrayList<>(o.groupCount());
+		List<String> l = list(o.groupCount());
 		for (int i = 0; i <= o.groupCount(); i++)
 			l.add(o.group(i));
 		return l;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index 7daeb7b..1d34ce1 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -414,12 +414,12 @@ public class UonParserSession extends ReaderParserSession implements HttpPartPar
 					o = cast(m, pMeta, eType);
 				// Handle case where it's an array, but only a single value was specified.
 				else {
-					ArrayList l = new ArrayList(1);
+					ArrayList l = list(1);
 					l.add(m.cast(sType.getElementType()));
 					o = toArray(sType, l);
 				}
 			} else {
-				ArrayList l = (ArrayList)parseIntoCollection(r, new ArrayList(), sType, isUrlParamValue, pMeta);
+				ArrayList l = (ArrayList)parseIntoCollection(r, list(), sType, isUrlParamValue, pMeta);
 				o = toArray(sType, l);
 			}
 		} else if (c == '(') {
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java
index 5859dc0..0f6f88c 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/PojoQuery.java
@@ -14,6 +14,7 @@ package org.apache.juneau.utils;
 
 import static java.util.Calendar.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.lang.reflect.*;
@@ -312,7 +313,7 @@ public final class PojoQuery {
 	private static void doSort(List list, Map<String,Boolean> sortList) {
 
 		// We reverse the list and sort last to first.
-		List<String> columns = new ArrayList<>(sortList.keySet());
+		List<String> columns = listFrom(sortList.keySet());
 		Collections.reverse(columns);
 
 		for (final String c : columns) {
@@ -1036,7 +1037,7 @@ public final class PojoQuery {
 			s = s.replace('\u9998', '-');
 
 			String[] sa = splitQuoted(s, ' ');
-			List<String> l = new ArrayList<>(sa.length);
+			List<String> l = list(sa.length);
 			int numOrs = 0;
 			for (int i = 0; i < sa.length; i++) {
 				String token = sa[i];
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
index 53d324d..26e2f12 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/ReflectionMap.java
@@ -159,10 +159,10 @@ public class ReflectionMap<V> {
 		 * Constructor.
 		 */
 		protected Builder() {
-			classEntries = new ArrayList<>();
-			methodEntries = new ArrayList<>();
-			fieldEntries = new ArrayList<>();
-			constructorEntries = new ArrayList<>();
+			classEntries = list();
+			methodEntries = list();
+			fieldEntries = list();
+			constructorEntries = list();
 		}
 
 		/**
@@ -171,10 +171,10 @@ public class ReflectionMap<V> {
 		 * @param copyFrom The builder being copied.
 		 */
 		protected Builder(Builder<V> copyFrom) {
-			classEntries = new ArrayList<>(copyFrom.classEntries);
-			methodEntries = new ArrayList<>(copyFrom.methodEntries);
-			fieldEntries = new ArrayList<>(copyFrom.fieldEntries);
-			constructorEntries = new ArrayList<>(copyFrom.constructorEntries);
+			classEntries = copyOf(copyFrom.classEntries);
+			methodEntries = copyOf(copyFrom.methodEntries);
+			fieldEntries = copyOf(copyFrom.fieldEntries);
+			constructorEntries = copyOf(copyFrom.constructorEntries);
 		}
 
 		/**
@@ -269,7 +269,7 @@ public class ReflectionMap<V> {
 	static List<String> splitNames(String key) {
 		if (key.indexOf(',') == -1)
 			return Collections.singletonList(key.trim());
-		List<String> l = new ArrayList<>();
+		List<String> l = list();
 
 		int m = 0;
 		boolean escaped = false;
@@ -363,7 +363,7 @@ public class ReflectionMap<V> {
 
 	private static <V> List<V> lazyAdd(List<V> list, V v) {
 		if (list == null)
-			list = new ArrayList<>();
+			list = list();
 		list.add(v);
 		return list;
 	}
@@ -805,7 +805,7 @@ public class ReflectionMap<V> {
 
 	private static <V> List<V> lazyAdd(V[] array, List<V> list, V v) {
 		if (list == null)
-			list = new ArrayList<>(Arrays.asList(array));
+			list = list(array);
 		list.add(v);
 		return list;
 	}
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java
index 5f616fb..48c60cc 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/SearchArgs.java
@@ -12,8 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static java.util.Collections.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.util.*;
@@ -41,9 +41,9 @@ public class SearchArgs {
 	private final boolean ignoreCase;
 
 	SearchArgs(Builder b) {
-		this.search = unmodifiableMap(new LinkedHashMap<>(b.search));
-		this.view = unmodifiableList(new ArrayList<>(b.view));
-		this.sort = unmodifiableMap(new LinkedHashMap<>(b.sort));
+		this.search = unmodifiable(copyOf(b.search));
+		this.view = unmodifiable(copyOf(b.view));
+		this.sort = unmodifiable(copyOf(b.sort));
 		this.position = b.position;
 		this.limit = b.limit;
 		this.ignoreCase = b.ignoreCase;
@@ -62,9 +62,9 @@ public class SearchArgs {
 	 * Builder for {@link SearchArgs} class.
 	 */
 	public static final class Builder {
-		Map<String,String> search = new LinkedHashMap<>();
-		List<String> view = new ArrayList<>();
-		Map<String,Boolean> sort = new LinkedHashMap<>();
+		Map<String,String> search = map();
+		List<String> view = list();
+		Map<String,Boolean> sort = map();
 		int position, limit;
 		boolean ignoreCase;
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
index 370a46e..b7483e8 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
@@ -18,6 +18,7 @@ import java.util.regex.*;
 
 import org.apache.juneau.internal.*;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StateMachineState.*;
 
 /**
@@ -98,8 +99,8 @@ public class StringExpressionMatcher {
 
 		expression = expression.trim();
 
-		List<Exp> ors = new ArrayList<>();
-		List<Exp> ands = new ArrayList<>();
+		List<Exp> ors = list();
+		List<Exp> ands = list();
 
 		StateMachineState state = S01;
 		int i = 0, mark = -1;
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
index 5ab9c17..d69cf82 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlClassMeta.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.xml;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -40,8 +42,8 @@ public class XmlClassMeta extends ExtendedClassMeta {
 	 */
 	public XmlClassMeta(ClassMeta<?> cm, XmlMetaProvider mp) {
 		super(cm);
-		List<Xml> xmls = new ArrayList<>();
-		List<XmlSchema> schemas = new ArrayList<>();
+		List<Xml> xmls = list();
+		List<XmlSchema> schemas = list();
 		if (cm != null) {
 			cm.forEachAnnotation(Xml.class, x -> true, x -> xmls.add(x));
 			cm.forEachAnnotation(XmlSchema.class, x -> true, x -> schemas.add(x));
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
index 52a1e8e..26f3eac 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlParserSession.java
@@ -541,7 +541,7 @@ public class XmlParserSession extends ReaderParserSession {
 				o = builder != null ? builder.build(this, m.getBean(), eType) : m.getBean();
 			}
 		} else if (sType.isArray() || sType.isArgs()) {
-			ArrayList l = (ArrayList)parseIntoCollection(r, new ArrayList(), sType, pMeta);
+			ArrayList l = (ArrayList)parseIntoCollection(r, list(), sType, pMeta);
 			o = toArray(sType, l);
 		} else if (sType.canCreateNewInstanceFromString(outer)) {
 			o = sType.newInstanceFromString(outer, getElementText(r));
@@ -795,7 +795,7 @@ public class XmlParserSession extends ReaderParserSession {
 			else if (cpcm.isCollectionOrArray()) {
 				Object o = cp.get(m, null);
 				if (o == null)
-					cp.set(m, cp.getName(), new ArrayList<>());
+					cp.set(m, cp.getName(), list());
 			}
 		}
 
diff --git a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
index be07da0..e6f0b7b 100644
--- a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
+++ b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/xml/XmlSerializer.java
@@ -511,7 +511,7 @@ public class XmlSerializer extends WriterSerializer implements XmlMetaProvider {
 		@FluentSetter
 		public Builder namespaces(Namespace...values) {
 			if (namespaces == null)
-				namespaces = new ArrayList<>();
+				namespaces = list();
 			Collections.addAll(namespaces, values);
 			return this;
 		}
diff --git a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
index ddb0cb8..1791bee 100644
--- a/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
+++ b/juneau-examples/juneau-examples-rest-jetty-ftest/src/test/java/org/apache/juneau/examples/rest/ContentComboTestBase.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.examples.rest;
 
 import static org.apache.juneau.examples.rest.TestUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.junit.runners.MethodSorters.*;
 
@@ -40,7 +41,7 @@ import org.junit.*;
 public class ContentComboTestBase extends RestTestcase {
 
 	// Reusable RestClients keyed by label that live for the duration of a testcase class.
-	private static Map<String,RestClient> clients = new LinkedHashMap<>();
+	private static Map<String,RestClient> clients = map();
 
 	protected RestClient getClient(MediaType mediaType) {
 		String mt = mediaType.toString();
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java
index 3170680..5221f8b 100644
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/LogConfig.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 import java.util.logging.*;
 import java.util.logging.Formatter;
@@ -39,7 +41,7 @@ public class LogConfig {
 	Boolean append;
 	Integer limit, count;
 	Level fileLevel, consoleLevel;
-	Map<String,Level> levels = new LinkedHashMap<>();
+	Map<String,Level> levels = map();
 	Formatter formatter;
 
 	LogConfig() {}
@@ -57,7 +59,7 @@ public class LogConfig {
 		this.count = copyFrom.count;
 		this.fileLevel = copyFrom.fileLevel;
 		this.consoleLevel = copyFrom.consoleLevel;
-		this.levels = new LinkedHashMap<>(copyFrom.levels);
+		this.levels = copyOf(copyFrom.levels);
 		this.formatter = copyFrom.formatter;
 	}
 
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
index 6e493d6..72fa903 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/Microservice.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.microservice;
 
 import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.FileUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
@@ -150,7 +151,7 @@ public class Microservice implements ConfigEventListener {
 		ConfigStore configStore;
 		Config.Builder configBuilder = Config.create();
 		Boolean consoleEnabled;
-		List<ConsoleCommand> consoleCommands = new ArrayList<>();
+		List<ConsoleCommand> consoleCommands = list();
 		VarResolver.Builder varResolver = VarResolver.create().defaultVars().vars(ConfigVar.class);
 		Scanner consoleReader;
 		PrintWriter consoleWriter;
@@ -1074,7 +1075,7 @@ public class Microservice implements ConfigEventListener {
 	 */
 	public String executeCommand(String command, String input, Object...args) {
 		StringWriter sw = new StringWriter();
-		List<String> l = new ArrayList<>();
+		List<String> l = list();
 		l.add(command);
 		for (Object a : args)
 			l.add(stringify(a));
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
index 8f5a2a1..d0ca7c4 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/DirectoryResource.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.resources;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
@@ -259,7 +260,7 @@ public class DirectoryResource extends BasicRestServlet implements BasicUniversa
 
 		@Html(format=HtmlFormat.HTML_CDC)
 		public List<Action> getActions() throws Exception {
-			List<Action> l = new ArrayList<>();
+			List<Action> l = list();
 			if (allowViews && f.canRead() && ! f.isDirectory()) {
 				l.add(new Action("view", uri + "?method=VIEW"));
 				l.add(new Action("download", uri + "?method=DOWNLOAD"));
diff --git a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
index 41b284b..bc1a366 100755
--- a/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
+++ b/juneau-microservice/juneau-microservice-core/src/main/java/org/apache/juneau/microservice/resources/LogsResource.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.resources;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -291,7 +292,7 @@ public class LogsResource extends BasicRestServlet implements BasicUniversalConf
 
 		@Html(format=HtmlFormat.HTML_CDC)
 		public List<Action> getActions() throws Exception {
-			List<Action> l = new ArrayList<>();
+			List<Action> l = list();
 			if (f.canRead() && ! f.isDirectory()) {
 				l.add(new Action("view", uri + "?method=VIEW"));
 				l.add(new Action("highlighted", uri + "?method=VIEW&highlight=true"));
diff --git a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java
index ee1faa2..d5827b5 100644
--- a/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java
+++ b/juneau-microservice/juneau-microservice-ftest/src/test/java/org/apache/juneau/rest/test/RestTestcase.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.test;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.*;
 import java.util.*;
 
@@ -30,10 +32,10 @@ public class RestTestcase {
 	private static boolean microserviceStarted;
 
 	// Reusable RestClients keyed by label that live for the duration of a testcase class.
-	private static Map<String,RestClient> clients = new LinkedHashMap<>();
+	private static Map<String,RestClient> clients = map();
 
 	// Reusable object cache that lives for the duration of a testcase class.
-	private static Map<String,Object> cache = new LinkedHashMap<>();
+	private static Map<String,Object> cache = map();
 
 	@BeforeClass
 	public static void setUp() {
diff --git a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
index e7c7a65..2a031f8 100644
--- a/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
+++ b/juneau-microservice/juneau-microservice-jetty/src/main/java/org/apache/juneau/microservice/jetty/JettyMicroservice.java
@@ -12,7 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.microservice.jetty;
 
-import static org.apache.juneau.internal.ClassUtils.className;
+import static org.apache.juneau.internal.ClassUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.IOUtils.read;
 import static org.apache.juneau.internal.StringUtils.*;
@@ -124,8 +125,8 @@ public class JettyMicroservice extends Microservice {
 		String jettyXml;
 		int[] ports;
 		Boolean jettyXmlResolveVars;
-		Map<String,Servlet> servlets = new LinkedHashMap<>();
-		Map<String,Object> servletAttributes = new LinkedHashMap<>();
+		Map<String,Servlet> servlets = map();
+		Map<String,Object> servletAttributes = map();
 		JettyMicroserviceListener listener;
 		JettyServerFactory factory;
 
@@ -144,8 +145,8 @@ public class JettyMicroservice extends Microservice {
 			this.jettyXml = copyFrom.jettyXml;
 			this.ports = copyFrom.ports;
 			this.jettyXmlResolveVars = copyFrom.jettyXmlResolveVars;
-			this.servlets = new LinkedHashMap<>(copyFrom.servlets);
-			this.servletAttributes = new LinkedHashMap<>(copyFrom.servletAttributes);
+			this.servlets = copyOf(copyFrom.servlets);
+			this.servletAttributes = copyOf(copyFrom.servletAttributes);
 			this.listener = copyFrom.listener;
 		}
 
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
index 4e10eb2..566e710 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestClient.java
@@ -4131,7 +4131,7 @@ public class RestClient extends BeanContextable implements HttpClient, Closeable
 		 */
 		@FluentSetter
 		public Builder interceptors(Object...value) {
-			List<RestCallInterceptor> l = new ArrayList<>();
+			List<RestCallInterceptor> l = list();
 			for (Object o : value) {
 				ClassInfo ci = ClassInfo.of(o);
 				if (ci != null) {
diff --git a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
index 8c0d3c8..c0af53c 100644
--- a/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
+++ b/juneau-rest/juneau-rest-client/src/main/java/org/apache/juneau/rest/client/RestRequest.java
@@ -88,7 +88,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	final RestClient client;                               // The client that created this call.
 	private final HttpRequestBase request;                 // The request.
 	private RestResponse response;                         // The response.
-	List<RestCallInterceptor> interceptors = new ArrayList<>();   // Used for intercepting and altering requests.
+	List<RestCallInterceptor> interceptors = list();   // Used for intercepting and altering requests.
 
 	private final HeaderList.Builder headerDataBuilder;
 	private final PartList.Builder queryDataBuilder, formDataBuilder, pathDataBuilder;
@@ -672,7 +672,7 @@ public class RestRequest extends BeanSession implements HttpUriRequest, Configur
 	@SuppressWarnings("unchecked")
 	public RestRequest rethrow(Class<?>...values) {
 		if (rethrow == null)
-			rethrow = new ArrayList<>();
+			rethrow = list();
 		for (Class<?> v : values) {
 			if (v != null && Throwable.class.isAssignableFrom(v))
 				rethrow.add((Class<? extends Throwable>)v);
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java
index 1dd8818..932baf1 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockHttpSession.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.mock;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 import javax.servlet.*;
@@ -31,7 +33,7 @@ import javax.servlet.http.*;
  */
 public class MockHttpSession implements HttpSession {
 
-	private Map<String,Object> attributes = new LinkedHashMap<>(), values = new LinkedHashMap<>();
+	private Map<String,Object> attributes = map(), values = map();
 
 	private long creationTime, lastAccessedTime;
 	private int maxInactiveInterval;
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockLogger.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockLogger.java
index 055a43b..9dea5ab 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockLogger.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockLogger.java
@@ -12,6 +12,7 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.mock;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 
 import java.io.*;
@@ -71,7 +72,7 @@ public class MockLogger extends Logger {
 
 	private static final String FORMAT_PROPERTY = "java.util.logging.SimpleFormatter.format";
 
-	private final List<LogRecord> logRecords = new ArrayList<>();
+	private final List<LogRecord> logRecords = list();
 	private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
 	private volatile Formatter formatter;
 	private volatile String format = "%4$s: %5$s%6$s%n";
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java
index f0e0e89..61de61f 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockRestRequest.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.mock;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.net.*;
 import java.security.*;
 import java.util.*;
@@ -42,8 +44,8 @@ public class MockRestRequest extends org.apache.juneau.rest.client.RestRequest {
 	//------------------------------------------------------------------------------------------------------------------
 	// Servlet request override values.
 	//------------------------------------------------------------------------------------------------------------------
-	private Map<String,Object> attributeMap = new LinkedHashMap<>();
-	private Map<String,RequestDispatcher> requestDispatcherMap = new LinkedHashMap<>();
+	private Map<String,Object> attributeMap = map();
+	private Map<String,RequestDispatcher> requestDispatcherMap = map();
 	private String characterEncoding, protocol, scheme, serverName, remoteAddr, remoteHost, localName, localAddr,
 		pathInfo, pathTranslated, contextPath, queryString, remoteUser, requestedSessionId, requestURI, servletPath, authType;
 	private Integer serverPort, remotePort, localPort;
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
index f6f7e8d..f1486bf 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletRequest.java
@@ -17,6 +17,7 @@ import static org.apache.juneau.internal.StringUtils.*;
 import static org.apache.juneau.internal.ThrowableUtils.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.IOUtils.*;
+import static java.util.Collections.*;
 
 import java.io.*;
 import java.security.*;
@@ -42,10 +43,10 @@ import org.apache.juneau.urlencoding.*;
 public class MockServletRequest implements HttpServletRequest {
 
 	private String method = "GET";
-	private Map<String,String[]> queryDataMap = new LinkedHashMap<>();
+	private Map<String,String[]> queryDataMap = map();
 	private Map<String,String[]> formDataMap;
 	private Map<String,String[]> headerMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);
-	private Map<String,Object> attributeMap = new LinkedHashMap<>();
+	private Map<String,Object> attributeMap = map();
 	private String characterEncoding = "UTF-8";
 	private byte[] body = new byte[0];
 	private String protocol = "HTTP/1.1";
@@ -59,7 +60,7 @@ public class MockServletRequest implements HttpServletRequest {
 	private String localName;
 	private String localAddr;
 	private int localPort;
-	private Map<String,RequestDispatcher> requestDispatcher = new LinkedHashMap<>();
+	private Map<String,RequestDispatcher> requestDispatcher = map();
 	private ServletContext servletContext;
 	private DispatcherType dispatcherType;
 	private String authType;
@@ -75,7 +76,7 @@ public class MockServletRequest implements HttpServletRequest {
 	private String servletPath = "";
 	private HttpSession httpSession = MockHttpSession.create();
 	private String uri = "";
-	private Set<String> roles = new LinkedHashSet<>();
+	private Set<String> roles = set();
 
 	/**
 	 * Creates a new servlet request.
@@ -545,7 +546,7 @@ public class MockServletRequest implements HttpServletRequest {
 
 	@Override /* HttpServletRequest */
 	public Enumeration<String> getParameterNames() {
-		return Collections.enumeration(new ArrayList<>(getParameterMap().keySet()));
+		return enumeration(listFrom(getParameterMap().keySet()));
 	}
 
 	@Override /* HttpServletRequest */
diff --git a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java
index 9aab46a..5829188 100644
--- a/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java
+++ b/juneau-rest/juneau-rest-mock/src/main/java/org/apache/juneau/rest/mock/MockServletResponse.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.mock;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.*;
 import java.util.*;
 
@@ -37,7 +39,7 @@ public class MockServletResponse implements HttpServletResponse {
 	private Locale locale;
 	private int sc;
 	private String msg;
-	private Map<String,String[]> headerMap = new LinkedHashMap<>();
+	private Map<String,String[]> headerMap = map();
 
 	/**
 	 * Creates a new servlet response.
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
index 9f3322f..5a31b7d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestChildren.java
@@ -121,7 +121,7 @@ public class RestChildren {
 	// Instance
 	//-----------------------------------------------------------------------------------------------------------------
 
-	private final Map<String,RestContext> children = Collections.synchronizedMap(new LinkedHashMap<String,RestContext>());
+	private final Map<String,RestContext> children = synced(map());
 
 	/**
 	 * Constructor.
@@ -162,7 +162,7 @@ public class RestChildren {
 	 * @return The children as an unmodifiable map.
 	 */
 	public Map<String,RestContext> asMap() {
-		return Collections.unmodifiableMap(children);
+		return unmodifiable(children);
 	}
 
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
index 97af85c..f51d56b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestContext.java
@@ -142,7 +142,7 @@ public class RestContext extends Context {
 	 * @return An unmodifiable map of resource classes to {@link RestContext} objects.
 	 */
 	public static final Map<Class<?>, RestContext> getGlobalRegistry() {
-		return Collections.unmodifiableMap(REGISTRY);
+		return unmodifiable(REGISTRY);
 	}
 
 	/**
@@ -271,7 +271,7 @@ public class RestContext extends Context {
 		Class<? extends RestOpContext> opContextClass = RestOpContext.class;
 		Class<? extends RestOperations> operationsClass = RestOperations.class;
 
-		List<Object> children = new ArrayList<>();
+		List<Object> children = list();
 
 		/**
 		 * Constructor.
@@ -367,7 +367,7 @@ public class RestContext extends Context {
 
 			Object r = resource.get();
 
-			Map<String,MethodInfo> map = new LinkedHashMap<>();
+			Map<String,MethodInfo> map = map();
 			ClassInfo.ofProxy(r).forEachAllMethodParentFirst(
 				y -> y.hasAnnotation(RestHook.class) && y.getAnnotation(RestHook.class).value() == HookEvent.INIT,
 				y -> {
@@ -5564,7 +5564,7 @@ public class RestContext extends Context {
 		@FluentSetter
 		public Builder produces(MediaType...values) {
 			if (produces == null)
-				produces = new ArrayList<>(Arrays.asList(values));
+				produces = list(values);
 			else
 				produces.addAll(Arrays.asList(values));
 			return this;
@@ -5627,7 +5627,7 @@ public class RestContext extends Context {
 		@FluentSetter
 		public Builder consumes(MediaType...values) {
 			if (consumes == null)
-				consumes = new ArrayList<>(Arrays.asList(values));
+				consumes = list(values);
 			else
 				consumes.addAll(Arrays.asList(values));
 			return this;
@@ -5944,14 +5944,14 @@ public class RestContext extends Context {
 
 			produces = builder.produces().orElseGet(
 				()->{
-					Set<MediaType> s = opContexts.isEmpty() ? emptySet() : new LinkedHashSet<>(opContexts.get(0).getSerializers().getSupportedMediaTypes());
+					Set<MediaType> s = opContexts.isEmpty() ? emptySet() : setFrom(opContexts.get(0).getSerializers().getSupportedMediaTypes());
 					opContexts.forEach(x -> s.retainAll(x.getSerializers().getSupportedMediaTypes()));
 					return unmodifiable(listFrom(s));
 				}
 			);
 			consumes = builder.consumes().orElseGet(
 				()->{
-					Set<MediaType> s = opContexts.isEmpty() ? emptySet() : new LinkedHashSet<>(opContexts.get(0).getParsers().getSupportedMediaTypes());
+					Set<MediaType> s = opContexts.isEmpty() ? emptySet() : setFrom(opContexts.get(0).getParsers().getSupportedMediaTypes());
 					opContexts.forEach(x -> s.retainAll(x.getParsers().getSupportedMediaTypes()));
 					return unmodifiable(listFrom(s));
 				}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
index 0b54cd3..fc1f35c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOpContext.java
@@ -24,8 +24,6 @@ import static org.apache.juneau.httppart.HttpPartType.*;
 import static org.apache.juneau.rest.HttpRuntimeException.*;
 import static org.apache.juneau.rest.util.RestUtils.*;
 import static java.util.Arrays.*;
-import static java.util.Collections.*;
-
 import java.lang.annotation.*;
 import java.lang.reflect.Method;
 import java.nio.charset.*;
@@ -1962,7 +1960,7 @@ public class RestOpContext extends Context implements Comparable<RestOpContext>
 		@FluentSetter
 		public Builder path(String...values) {
 			if (path == null)
-				path = new ArrayList<>(Arrays.asList(values));
+				path = list(values);
 			else
 				path.addAll(0, Arrays.asList(values));
 			return this;
@@ -1997,7 +1995,7 @@ public class RestOpContext extends Context implements Comparable<RestOpContext>
 		@FluentSetter
 		public Builder produces(MediaType...values) {
 			if (produces == null)
-				produces = new ArrayList<>(Arrays.asList(values));
+				produces = list(values);
 			else
 				produces.addAll(Arrays.asList(values));
 			return this;
@@ -2275,8 +2273,8 @@ public class RestOpContext extends Context implements Comparable<RestOpContext>
 			pathMatchers = bs.add(UrlPathMatcher[].class, builder.getPathMatchers().asArray());
 			bs.addBean(UrlPathMatcher.class, pathMatchers.length > 0 ? pathMatchers[0] : null);
 
-			supportedAcceptTypes = unmodifiableList(optional(builder.produces).orElseGet(()->serializers.getSupportedMediaTypes()));
-			supportedContentTypes = unmodifiableList(optional(builder.consumes).orElseGet(()->parsers.getSupportedMediaTypes()));
+			supportedAcceptTypes = unmodifiable(optional(builder.produces).orElseGet(()->serializers.getSupportedMediaTypes()));
+			supportedContentTypes = unmodifiable(optional(builder.consumes).orElseGet(()->parsers.getSupportedMediaTypes()));
 
 			defaultRequestHeaders = builder.defaultRequestHeaders().build();
 			defaultResponseHeaders = builder.defaultResponseHeaders().build();
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
index 82da355..130cff6 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestOperations.java
@@ -138,7 +138,7 @@ public class RestOperations {
 	//-----------------------------------------------------------------------------------------------------------------
 
 	private final Map<String,List<RestOpContext>> map;
-	private List<RestOpContext> list;
+	private RestOpContext[] list;
 
 	/**
 	 * Constructor.
@@ -150,7 +150,7 @@ public class RestOperations {
 		for (Map.Entry<String,TreeSet<RestOpContext>> e : builder.map.entrySet())
 			m.put(e.getKey(), listFrom(e.getValue()));
 		this.map = m;
-		this.list = listFrom(builder.set);
+		this.list = array(builder.set, RestOpContext.class);
 	}
 
 	/**
@@ -209,6 +209,6 @@ public class RestOperations {
 	 * @return An unmodifiable list of method contexts in this object.
 	 */
 	public List<RestOpContext> getOpContexts() {
-		return Collections.unmodifiableList(list);
+		return unmodifiable(alist(list));
 	}
 }
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java
index 2b502ca..fd5b0a5 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/RestSession.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.io.*;
 import java.util.*;
 
@@ -454,7 +456,7 @@ public class RestSession extends ContextSession {
 	public Map<String,String[]> getQueryParams() {
 		if (queryParams == null) {
 			if (req.getMethod().equalsIgnoreCase("POST"))
-				queryParams = RestUtils.parseQuery(req.getQueryString(), new LinkedHashMap<>());
+				queryParams = RestUtils.parseQuery(req.getQueryString(), map());
 			else
 				queryParams = req.getParameterMap();
 		}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/FormDataArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/FormDataArg.java
index e757ee6..faa2032 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/FormDataArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/FormDataArg.java
@@ -99,7 +99,7 @@ public class FormDataArg implements RestOpArg {
 		ClassMeta<?> cm = bs.getClassMeta(type.innerType());
 
 		if (multi) {
-			Collection c = cm.isArray() ? new ArrayList<>() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new OList());
+			Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new OList());
 			rh.getAll(name).stream().map(x -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> c.add(x));
 			return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;
 		}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HeaderArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HeaderArg.java
index c911d3f..f26b6e7 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HeaderArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/HeaderArg.java
@@ -140,7 +140,7 @@ public class HeaderArg implements RestOpArg {
 		ClassMeta<?> cm = bs.getClassMeta(type.innerType());
 
 		if (multi) {
-			Collection c = cm.isArray() ? new ArrayList<>() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new OList());
+			Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new OList());
 			rh.getAll(name).stream().map(x -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> c.add(x));
 			return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;
 		}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/QueryArg.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/QueryArg.java
index d5d86fd..5ff446b 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/QueryArg.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/arg/QueryArg.java
@@ -98,7 +98,7 @@ public class QueryArg implements RestOpArg {
 		ClassMeta<?> cm = bs.getClassMeta(type.innerType());
 
 		if (multi) {
-			Collection c = cm.isArray() ? new ArrayList<>() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new OList());
+			Collection c = cm.isArray() ? list() : (Collection)(cm.canCreateNewInstance() ? cm.newInstance() : new OList());
 			rh.getAll(name).stream().map(x -> x.parser(ps).schema(schema).as(cm.getElementType()).orElse(null)).forEach(x -> c.add(x));
 			return cm.isArray() ? ArrayUtils.toArray(c, cm.getElementType().getInnerClass()) : c;
 		}
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
index 7f2d00f..d93f02c 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
@@ -18,6 +18,7 @@ import java.util.regex.*;
 
 import org.apache.juneau.internal.*;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StateMachineState.*;
 
 /**
@@ -99,8 +100,8 @@ public class RoleMatcher {
 
 		expression = expression.trim();
 
-		List<Exp> ors = new ArrayList<>();
-		List<Exp> ands = new ArrayList<>();
+		List<Exp> ors = list();
+		List<Exp> ands = list();
 
 		StateMachineState state = S01;
 		int i = 0, mark = -1;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/NamedAttributeList.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/NamedAttributeList.java
index e8f147a..fff0c40 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/NamedAttributeList.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/NamedAttributeList.java
@@ -12,6 +12,8 @@
 // ***************************************************************************************************************************
 package org.apache.juneau.rest.httppart;
 
+import static org.apache.juneau.internal.CollectionUtils.*;
+
 import java.util.*;
 
 import org.apache.juneau.*;
@@ -61,14 +63,14 @@ public class NamedAttributeList {
 	@FluentSetters
 	public static class Builder extends BeanBuilder<NamedAttributeList> {
 
-		LinkedHashMap<String,NamedAttribute> entries;
+		Map<String,NamedAttribute> entries;
 
 		/**
 		 * Constructor.
 		 */
 		protected Builder() {
 			super(NamedAttributeList.class, BeanStore.INSTANCE);
-			entries = new LinkedHashMap<>();
+			entries = map();
 		}
 
 		/**
@@ -78,7 +80,7 @@ public class NamedAttributeList {
 		 */
 		protected Builder(Builder copyFrom) {
 			super(copyFrom);
-			entries = new LinkedHashMap<>(copyFrom.entries);
+			entries = copyOf(copyFrom.entries);
 		}
 
 		@Override /* BeanBuilder */
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java
index ee86a74..54dc90d 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestAttributes.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.rest.httppart;
 
 import static org.apache.juneau.assertions.Assertions.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 
 import java.util.*;
 
@@ -180,7 +181,7 @@ public class RequestAttributes {
 	 * @return All the attribute on this request.
 	 */
 	public List<RequestAttribute> getAll() {
-		ArrayList<RequestAttribute> l = new ArrayList<>();
+		List<RequestAttribute> l = list();
 		Enumeration<String> e = sreq.getAttributeNames();
 		while (e.hasMoreElements()) {
 			String n = e.nextElement();
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
index df670d8..865b857 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestFormParams.java
@@ -150,7 +150,7 @@ public class RequestFormParams {
 			for (Map.Entry<String,String[]> e : m.entrySet()) {
 				String name = e.getKey();
 				String key = key(name);
-				List<RequestFormParam> l = new ArrayList<>();
+				List<RequestFormParam> l = list();
 
 				String[] values = e.getValue();
 				if (values == null)
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
index 6ddc739..8c70f56 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestHeaders.java
@@ -135,7 +135,7 @@ public class RequestHeaders {
 		for (Enumeration<String> e = req.getHttpServletRequest().getHeaderNames(); e.hasMoreElements();) {
 			String name = e.nextElement();
 			String key = key(name);
-			List<RequestHeader> l = new ArrayList<>();
+			List<RequestHeader> l = list();
 			for (Enumeration<String> ve = req.getHttpServletRequest().getHeaders(name); ve.hasMoreElements();) {
 				RequestHeader h = new RequestHeader(req, name, ve.nextElement());
 				list.add(h);
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
index f35213a..54c0087 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/httppart/RequestQueryParams.java
@@ -139,7 +139,7 @@ public class RequestQueryParams {
 		for (Map.Entry<String,String[]> e : query.entrySet()) {
 			String name = e.getKey();
 			String key = key(name);
-			List<RequestQueryParam> l = new ArrayList<>();
+			List<RequestQueryParam> l = list();
 
 			String[] values = e.getValue();
 			if (values == null)
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
index 2094573..2f8b074 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/remote/RrpcServlet.java
@@ -14,6 +14,7 @@ package org.apache.juneau.rest.remote;
 
 import static org.apache.juneau.dto.html5.HtmlBuilder.*;
 import static org.apache.juneau.http.HttpMethod.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.StringUtils.*;
 
 import java.io.*;
@@ -98,7 +99,7 @@ public abstract class RrpcServlet extends BasicRestServlet {
 			@Path("javaInterface") @Schema(description="Java interface name") String javaInterface
 		) throws Exception {
 
-		List<LinkString> l = new ArrayList<>();
+		List<LinkString> l = list();
 		for (String s : getMethods(javaInterface).keySet())
 			l.add(new LinkString(s, "servlet:/{0}/{1}", urlEncode(javaInterface), urlEncode(s)));
 		return l;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
index 900bcda..fbd98bb 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/stats/ThrownStore.java
@@ -13,7 +13,6 @@
 package org.apache.juneau.rest.stats;
 
 import static java.util.stream.Collectors.*;
-import static java.util.Collections.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.ObjectUtils.*;
 import static java.util.Comparator.*;
@@ -188,7 +187,7 @@ public class ThrownStore {
 			s = parent.get().ignoreClasses;
 		if (s == null)
 			s = Collections.emptySet();
-		this.ignoreClasses = unmodifiableSet(s);
+		this.ignoreClasses = unmodifiable(s);
 	}
 
 
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
index 0165052..4c7a282 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/swagger/BasicSwaggerProviderSession.java
@@ -185,7 +185,7 @@ public class BasicSwaggerProviderSession {
 		if (produces.isEmpty())
 			produces.addAll(context.getProduces());
 
-		Map<String,OMap> tagMap = new LinkedHashMap<>();
+		Map<String,OMap> tagMap = map();
 		if (omSwagger.containsKey("tags")) {
 			for (OMap om : omSwagger.getList("tags").elements(OMap.class)) {
 				String name = om.getString("name");
@@ -412,9 +412,9 @@ public class BasicSwaggerProviderSession {
 			}
 
 			if (mi.hasAnnotation(Response.class) || mi.getReturnType().unwrap(Value.class,Optional.class).hasAnnotation(Response.class)) {
-				List<Response> la = new ArrayList<>();
+				List<Response> la = list();
 				mi.forEachAnnotation(context, Response.class, x -> true, x -> la.add(x));
-				List<StatusCode> la2 = new ArrayList<>();
+				List<StatusCode> la2 = list();
 				mi.forEachAnnotation(context, StatusCode.class, x -> true, x -> la2.add(x));
 				Set<Integer> codes = getCodes(la2, 200);
 				for (Response a : la) {
@@ -463,10 +463,10 @@ public class BasicSwaggerProviderSession {
 				ClassInfo pt = mpi.getParameterType();
 
 				if (pt.is(Value.class) && (mpi.hasAnnotation(Header.class) || pt.hasAnnotation(Header.class))) {
-					List<Header> la = new ArrayList<>();
+					List<Header> la = list();
 					mpi.forEachAnnotation(Header.class, x -> true, x -> la.add(x));
 					pt.forEachAnnotation(Header.class, x -> true, x -> la.add(x));
-					List<StatusCode> la2 = new ArrayList<>();
+					List<StatusCode> la2 = list();
 					mpi.forEachAnnotation(StatusCode.class, x -> true, x -> la2.add(x));
 					pt.forEachAnnotation(StatusCode.class, x -> true, x -> la2.add(x));
 					Set<Integer> codes = getCodes(la2, 200);
@@ -484,10 +484,10 @@ public class BasicSwaggerProviderSession {
 					}
 
 				} else if (mpi.hasAnnotation(Response.class) || pt.hasAnnotation(Response.class)) {
-					List<Response> la = new ArrayList<>();
+					List<Response> la = list();
 					mpi.forEachAnnotation(Response.class, x -> true, x -> la.add(x));
 					pt.forEachAnnotation(Response.class, x -> true, x -> la.add(x));
-					List<StatusCode> la2 = new ArrayList<>();
+					List<StatusCode> la2 = list();
 					mpi.forEachAnnotation(StatusCode.class, x -> true, x -> la2.add(x));
 					pt.forEachAnnotation(StatusCode.class, x -> true, x -> la2.add(x));
 					Set<Integer> codes = getCodes(la2, 200);
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
index 50d86b7..9fe40f8 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/RestUtils.java
@@ -289,7 +289,7 @@ public final class RestUtils {
 		try {
 			Map<String,String[]> m = map;
 			if (m == null)
-				m = new LinkedHashMap<>();
+				m = map();
 
 			if (qs == null || ((qs instanceof CharSequence) && isEmpty(qs)))
 				return m;
diff --git a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatcher.java b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatcher.java
index c09349d..8133e59 100644
--- a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatcher.java
+++ b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/util/UrlPathMatcher.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.rest.util;
 
 import static org.apache.juneau.internal.StringUtils.*;
+import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.internal.FileUtils.*;
 
 import java.util.*;
@@ -112,7 +113,7 @@ public abstract class UrlPathMatcher implements Comparable<UrlPathMatcher> {
 
 			this.parts = parts;
 			this.vars = new String[parts.length];
-			List<String> vars = new ArrayList<>();
+			List<String> vars = list();
 
 			for (int i = 0; i < parts.length; i++) {
 				Matcher m = VAR_PATTERN.matcher(parts[i]);
diff --git a/juneau-utest/src/test/java/org/apache/juneau/pojotools/PojoSearcherTest.java b/juneau-utest/src/test/java/org/apache/juneau/pojotools/PojoSearcherTest.java
index 195378a..660ec0f 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/pojotools/PojoSearcherTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/pojotools/PojoSearcherTest.java
@@ -901,7 +901,6 @@ public class PojoSearcherTest {
 			list(map("quux",null)),
 			list(map(null,null)),
 			list("xxx"),
-			list(123),
 			null
 		);
 		assertObject(run(in, "f=foo")).asJson().is("[[{f:'foo'}]]");