refactored / initial capacity
diff --git a/api/src/main/java/javax/faces/component/UIViewRoot.java b/api/src/main/java/javax/faces/component/UIViewRoot.java
index 85df3b4..4cad635 100644
--- a/api/src/main/java/javax/faces/component/UIViewRoot.java
+++ b/api/src/main/java/javax/faces/component/UIViewRoot.java
@@ -1803,7 +1803,7 @@
     {
         if (listenerSuccessMap == null)
         {
-            listenerSuccessMap = new HashMap<>(7, 1f);
+            listenerSuccessMap = new HashMap<>(PhaseId.VALUES.size(), 1f);
         }
         return listenerSuccessMap;
     }
diff --git a/impl/src/main/java/org/apache/myfaces/application/NavigationHandlerImpl.java b/impl/src/main/java/org/apache/myfaces/application/NavigationHandlerImpl.java
index 2139962..f38d542 100755
--- a/impl/src/main/java/org/apache/myfaces/application/NavigationHandlerImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/application/NavigationHandlerImpl.java
@@ -177,7 +177,7 @@
                 Flow targetFlow = calculateTargetFlow(facesContext, outcome, flowHandler, 
                                                       activeFlows, toFlowDocumentId);
                 
-                Map<String,List<String>> navigationCaseParameters = navigationCase.getParameters();
+                Map<String, List<String>> navigationCaseParameters = navigationCase.getParameters();
                 
                 // Spec: If this navigation is a flow transition (where current flow is not the same as the new flow)
                 // sourceFlow and targetFlow could both be null so need to have multiple checks here
@@ -189,8 +189,9 @@
                     {
                         if (navigationCaseParameters == null)
                         {
-                            navigationCaseParameters = new HashMap<>();
+                            navigationCaseParameters = new HashMap<>(5, 1f);
                         }
+                        
                         // If current flow (sourceFlow) is not null and new flow (targetFlow) is null,
                         // include the following entries:
                         if (currentFlow != null && targetFlow == null)
diff --git a/impl/src/main/java/org/apache/myfaces/config/annotation/CdiAnnotationProviderExtension.java b/impl/src/main/java/org/apache/myfaces/config/annotation/CdiAnnotationProviderExtension.java
index 83355f5..8dfd4a4 100644
--- a/impl/src/main/java/org/apache/myfaces/config/annotation/CdiAnnotationProviderExtension.java
+++ b/impl/src/main/java/org/apache/myfaces/config/annotation/CdiAnnotationProviderExtension.java
@@ -43,7 +43,7 @@
 

     public CdiAnnotationProviderExtension()

     {

-        map = new HashMap<>();

+        map = new HashMap<>(8, 1f);

         annotationsToScan = new Class[] {

             FacesComponent.class,

             FacesBehavior.class,

diff --git a/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultAnnotationProvider.java b/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultAnnotationProvider.java
index 6a813ae..b4d5059 100644
--- a/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultAnnotationProvider.java
+++ b/impl/src/main/java/org/apache/myfaces/config/annotation/DefaultAnnotationProvider.java
@@ -153,7 +153,7 @@
             }
         }
 
-        Map<Class<? extends Annotation>,Set<Class<?>>> map = new HashMap<>();
+        Map<Class<? extends Annotation>, Set<Class<?>>> map = new HashMap<>();
         Collection<Class<?>> classes = null;
 
         //1. Scan for annotations on /WEB-INF/classes
diff --git a/impl/src/main/java/org/apache/myfaces/context/RequestViewContext.java b/impl/src/main/java/org/apache/myfaces/context/RequestViewContext.java
index 2e29ddd..cddf900 100644
--- a/impl/src/main/java/org/apache/myfaces/context/RequestViewContext.java
+++ b/impl/src/main/java/org/apache/myfaces/context/RequestViewContext.java
@@ -109,14 +109,8 @@
     
     public static void setCurrentInstance(FacesContext ctx, UIViewRoot root, RequestViewContext rvc)
     {
-        Map<UIViewRoot, RequestViewContext> map
-                = (Map<UIViewRoot, RequestViewContext>) ctx.getAttributes().get(VIEW_CONTEXT_KEY);
-        if (map == null)
-        {
-            map = new HashMap<>();
-            ctx.getAttributes().put(VIEW_CONTEXT_KEY, map);
-        }
-
+        Map<UIViewRoot, RequestViewContext> map = (Map<UIViewRoot, RequestViewContext>) ctx.getAttributes()
+                .computeIfAbsent(VIEW_CONTEXT_KEY, k -> new HashMap<>());
         map.put(root, rvc);
     }
 
diff --git a/impl/src/main/java/org/apache/myfaces/context/servlet/FacesContextImpl.java b/impl/src/main/java/org/apache/myfaces/context/servlet/FacesContextImpl.java
index e88891c..09b79c7 100755
--- a/impl/src/main/java/org/apache/myfaces/context/servlet/FacesContextImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/context/servlet/FacesContextImpl.java
@@ -173,11 +173,11 @@
 
         if (_messages == null)
         {
-            _messages = new LinkedHashMap<>();
+            _messages = new LinkedHashMap<>(5, 1f);
             _orderedMessages = new ArrayList<>();
         }
         
-        List<FacesMessage> lst = _messages.computeIfAbsent(clientId, k -> new ArrayList<>());         
+        List<FacesMessage> lst = _messages.computeIfAbsent(clientId, k -> new ArrayList<>(3));         
         lst.add(message);
 
         _orderedMessages.add(message);
diff --git a/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java b/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
index 292def5..40b11bd 100755
--- a/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/context/servlet/ServletExternalContextImpl.java
@@ -886,9 +886,8 @@
 
                 if (paramMap == null)
                 {
-                    paramMap = new HashMap<String, List<String>>();
+                    paramMap = new HashMap<>(5, 1f);
                 }
-                
                 List<String> values = paramMap.computeIfAbsent(currentName, k -> new ArrayList<>(1));
 
                 try
@@ -916,7 +915,7 @@
                 {
                     if (paramMap == null)
                     {
-                        paramMap = new HashMap<>();
+                        paramMap = new HashMap<>(5, 1f);
                     }
                     paramMap.put(key, pair.getValue());
                 }
@@ -938,7 +937,7 @@
                         value.add(entry.getValue());
                         if (paramMap == null)
                         {
-                            paramMap = new HashMap<>();
+                            paramMap = new HashMap<>(5, 1f);
                         }
                         paramMap.put(entry.getKey(), value);
                     }
@@ -946,7 +945,7 @@
             }
         }        
 
-        boolean hasParams = paramMap != null && paramMap.size()>0;
+        boolean hasParams = paramMap != null && paramMap.size() > 0;
 
         if (!hasParams && fragment == null) 
         {
diff --git a/impl/src/main/java/org/apache/myfaces/flow/impl/DefaultFacesFlowProvider.java b/impl/src/main/java/org/apache/myfaces/flow/impl/DefaultFacesFlowProvider.java
index 17558ab..8b260a9 100644
--- a/impl/src/main/java/org/apache/myfaces/flow/impl/DefaultFacesFlowProvider.java
+++ b/impl/src/main/java/org/apache/myfaces/flow/impl/DefaultFacesFlowProvider.java
@@ -111,8 +111,7 @@
      * This wrapper is used to implement the maps for the flash scope.
      * For more information see the SubKeyMap doc.
      */
-    Map<Object, Object> createOrRestoreMap(FacesContext context, String prefix,
-        boolean create)
+    Map<Object, Object> createOrRestoreMap(FacesContext context, String prefix, boolean create)
     {
         ExternalContext external = context.getExternalContext();
         Map<String, Object> sessionMap = external.getSessionMap();
diff --git a/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java b/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java
index e1b857f..2e188fe 100755
--- a/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/lifecycle/LifecycleFactoryImpl.java
@@ -39,7 +39,7 @@
      * do not block, and it is more often retrieval (at begin of all requests) than addition (when 
      * startup listener is called and configuration occur). 
      */
-    private final Map<String, Lifecycle> _lifecycles = new ConcurrentHashMap<>();
+    private final Map<String, Lifecycle> _lifecycles = new ConcurrentHashMap<>(3, 1f);
 
     public LifecycleFactoryImpl()
     {
diff --git a/impl/src/main/java/org/apache/myfaces/renderkit/html/util/OutcomeTargetUtils.java b/impl/src/main/java/org/apache/myfaces/renderkit/html/util/OutcomeTargetUtils.java
index e10ca03..852471f 100644
--- a/impl/src/main/java/org/apache/myfaces/renderkit/html/util/OutcomeTargetUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/renderkit/html/util/OutcomeTargetUtils.java
@@ -98,7 +98,7 @@
                     true, false);
             if (validParams.size() > 0)
             {
-                parameters = new HashMap<>();
+                parameters = new HashMap<>(5, 1f);
             }
             for (int i = 0, size = validParams.size(); i < size; i++)
             {
@@ -124,17 +124,17 @@
         {
             if (parameters == null)
             {
-                parameters = new HashMap<>();
+                parameters = new HashMap<>(5, 1f);
             }
             if (!parameters.containsKey(FlowHandler.TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME))
             {
-                List<String> list = new ArrayList<String>(1);
+                List<String> list = new ArrayList<>(1);
                 list.add(navigationCase.getToFlowDocumentId());
                 parameters.put(FlowHandler.TO_FLOW_DOCUMENT_ID_REQUEST_PARAM_NAME, list);
             }
             if (!parameters.containsKey(FlowHandler.FLOW_ID_REQUEST_PARAM_NAME))
             {
-                List<String> list2 = new ArrayList<String>(1);
+                List<String> list2 = new ArrayList<>(1);
                 list2.add(navigationCase.getFromOutcome());
                 parameters.put(FlowHandler.FLOW_ID_REQUEST_PARAM_NAME, list2);
             }
@@ -147,7 +147,7 @@
         {
             if (parameters == null)
             {
-                parameters = new HashMap<String, List<String>>();
+                parameters = new HashMap<>(5, 1f);
             }
             for (Map.Entry<String, List<String>> entry : navigationCaseParams.entrySet())
             {
diff --git a/impl/src/main/java/org/apache/myfaces/util/NavigationUtils.java b/impl/src/main/java/org/apache/myfaces/util/NavigationUtils.java
index caafcc7..928ff41 100644
--- a/impl/src/main/java/org/apache/myfaces/util/NavigationUtils.java
+++ b/impl/src/main/java/org/apache/myfaces/util/NavigationUtils.java
@@ -36,8 +36,7 @@
 {

     public static Set<NavigationCase> convertNavigationCasesToAPI(NavigationRule rule)

     {

-        List<? extends org.apache.myfaces.config.element.NavigationCase> configCases = 

-                rule.getNavigationCases();

+        List<? extends org.apache.myfaces.config.element.NavigationCase> configCases = rule.getNavigationCases();

         

         Set<NavigationCase> apiCases = new HashSet<>(configCases.size());

         for (org.apache.myfaces.config.element.NavigationCase configCase : configCases)

@@ -78,17 +77,17 @@
      * Evaluate all EL expressions found as parameters and return a map that can be used for 

      * redirect or render bookmark links

      * 

+     * @param facesContext

      * @param parameters parameter map retrieved from NavigationCase.getParameters()

      * @return

      */

     public static Map<String, List<String> > getEvaluatedNavigationParameters(

             FacesContext facesContext, 

-            Map<String, List<String> > parameters)

+            Map<String, List<String>> parameters)

     {

-        Map<String,List<String>> evaluatedParameters = null;

-        if (parameters != null && parameters.size() > 0)

+        if (parameters != null && !parameters.isEmpty())

         {

-            evaluatedParameters = new HashMap<String, List<String>>();

+            Map<String,List<String>> evaluatedParameters = new HashMap<>(parameters.size());

             for (Map.Entry<String, List<String>> pair : parameters.entrySet())

             {

                 boolean containsEL = false;

@@ -110,12 +109,11 @@
                     evaluatedParameters.put(pair.getKey(), pair.getValue());

                 }

             }

+            

+            return evaluatedParameters;

         }

-        else

-        {

-            evaluatedParameters = parameters;

-        }

-        return evaluatedParameters;

+

+        return parameters;

     }

     

     /**

@@ -130,7 +128,7 @@
         // note that we have to create a new List here, because if we

         // change any value on the given List, it will be changed in the

         // NavigationCase too and the EL expression won't be evaluated again

-        List<String> target = new ArrayList<String>(values.size());

+        List<String> target = new ArrayList<>(values.size());

         for (String value : values)

         {

             if (_isExpression(value))

diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java b/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
index 92c917e..09d377c 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/DefaultFaceletsStateManagementStrategy.java
@@ -670,7 +670,6 @@
         if (view == null)
         {
             // Not much that can be done.
-            
             return null;
         }
         
@@ -720,7 +719,7 @@
                 faceletViewState = view.getAttributes().get(ComponentSupport.FACELET_STATE_INSTANCE);
                 if (faceletViewState != null)
                 {
-                    ((Map<String, Object>)states).put(ComponentSupport.FACELET_STATE_INSTANCE,
+                    ((Map<String, Object>) states).put(ComponentSupport.FACELET_STATE_INSTANCE,
                             UIComponentBase.saveAttachedState(context, faceletViewState));
                     //Do not save on UIViewRoot
                     view.getAttributes().remove(ComponentSupport.FACELET_STATE_INSTANCE);
@@ -743,7 +742,7 @@
                     saveStateOnMapVisitTree(context,(Map<String,Object>) states, view);
                 }
                 
-                if (((Map<String,Object>)states).isEmpty())
+                if (((Map<String,Object>) states).isEmpty())
                 {
                     states = null;
                 }
@@ -782,8 +781,7 @@
         return serializedView;
     }
     
-    private void restoreViewRootOnlyFromMap(final FacesContext context, final Object viewState,
-            final UIComponent view)
+    private void restoreViewRootOnlyFromMap(final FacesContext context, final Object viewState, final UIComponent view)
     {
         // Only viewState found, process it but skip tree
         // traversal, saving some time.
diff --git a/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeMetaRulesetImpl.java b/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeMetaRulesetImpl.java
index 8ec2fd3..4195297 100644
--- a/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeMetaRulesetImpl.java
+++ b/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CompositeMetaRulesetImpl.java
@@ -53,12 +53,8 @@
         FacesContext facesContext = FacesContext.getCurrentInstance();
         Map<String, Object> applicationMap = facesContext.getExternalContext().getApplicationMap();
 
-        Map<String, MetadataTarget> metadata = (Map<String, MetadataTarget>) applicationMap.get(METADATA_KEY);
-        if (metadata == null)
-        {
-            metadata = new HashMap<>();
-            applicationMap.put(METADATA_KEY, metadata);
-        }
+        Map<String, MetadataTarget> metadata = (Map<String, MetadataTarget>) applicationMap.computeIfAbsent(
+                METADATA_KEY, k -> new HashMap<>());
 
         return metadata;
     }
@@ -202,12 +198,12 @@
         return this;
     }
 
-    private final MetadataTarget _getMetadataTarget()
+    private MetadataTarget _getMetadataTarget()
     {
         return _meta;
     }
     
-    private final MetadataTarget _getBaseMetadataTarget()
+    private MetadataTarget _getBaseMetadataTarget()
     {
         Map<String, MetadataTarget> metadata = getMetaData();
         String key = _type.getName();