Avoid resizing of fixed-size HashSet/LinkedHashSet variants

Add helpers to CollectionUtils for building HashSets and LinkedHashSets
that can hold an expected number of elements without needing to
resize/rehash.

Closes gh-32291
This commit is contained in:
Patrick Strawderman
2024-02-18 14:05:31 -08:00
committed by Sam Brannen
parent 6383a0d7ca
commit e1a32d4ba9
47 changed files with 114 additions and 75 deletions

View File

@@ -29,6 +29,7 @@ import org.springframework.transaction.interceptor.AbstractFallbackTransactionAt
import org.springframework.transaction.interceptor.TransactionAttribute;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.CollectionUtils;
/**
* Implementation of the
@@ -92,7 +93,7 @@ public class AnnotationTransactionAttributeSource extends AbstractFallbackTransa
public AnnotationTransactionAttributeSource(boolean publicMethodsOnly) {
this.publicMethodsOnly = publicMethodsOnly;
if (jta12Present || ejb3Present) {
this.annotationParsers = new LinkedHashSet<>(4);
this.annotationParsers = CollectionUtils.newLinkedHashSet(3);
this.annotationParsers.add(new SpringTransactionAnnotationParser());
if (jta12Present) {
this.annotationParsers.add(new JtaTransactionAnnotationParser());

View File

@@ -18,11 +18,11 @@ package org.springframework.transaction.interceptor;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;
import org.springframework.lang.Nullable;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.util.StringValueResolver;
@@ -216,7 +216,7 @@ public class DefaultTransactionAttribute extends DefaultTransactionDefinition im
if (this.qualifier != null) {
this.qualifier = resolver.resolveStringValue(this.qualifier);
}
Set<String> resolvedLabels = new LinkedHashSet<>(this.labels.size());
Set<String> resolvedLabels = CollectionUtils.newLinkedHashSet(this.labels.size());
for (String label : this.labels) {
resolvedLabels.add(resolver.resolveStringValue(label));
}