From 5a5bddc6409eacdd6ac4ea53422312e3e4572108 Mon Sep 17 00:00:00 2001 From: Tim Wilson Date: Wed, 16 May 2018 21:57:07 -0700 Subject: [PATCH] Presize ArrayLists whose max size is known --- .../codegen/AbstractGeneratorStrategy.java | 12 +-- .../java/org/jooq/codegen/JavaGenerator.java | 10 +-- .../java/org/jooq/codegen/JavaWriter.java | 2 +- .../org/jooq/codegen/MatcherStrategy.java | 5 +- .../jpa/AttributeConverterExtractor.java | 2 +- .../java/org/jooq/meta/AbstractDatabase.java | 2 +- .../java/org/jooq/impl/AbstractCursor.java | 4 +- .../java/org/jooq/impl/AbstractDMLQuery.java | 2 +- .../java/org/jooq/impl/AbstractField.java | 4 +- .../java/org/jooq/impl/AbstractRoutine.java | 4 +- .../main/java/org/jooq/impl/BatchSingle.java | 4 +- jOOQ/src/main/java/org/jooq/impl/DAOImpl.java | 2 +- jOOQ/src/main/java/org/jooq/impl/DDL.java | 6 +- jOOQ/src/main/java/org/jooq/impl/DSL.java | 2 +- .../java/org/jooq/impl/DefaultDSLContext.java | 6 +- .../org/jooq/impl/DefaultRecordMapper.java | 2 +- .../src/main/java/org/jooq/impl/DivideBy.java | 2 +- .../org/jooq/impl/FieldMapsForInsert.java | 2 +- .../java/org/jooq/impl/InsertQueryImpl.java | 2 +- .../main/java/org/jooq/impl/JSONReader.java | 6 +- .../main/java/org/jooq/impl/JoinTable.java | 10 +-- .../main/java/org/jooq/impl/MergeImpl.java | 5 +- .../src/main/java/org/jooq/impl/MetaImpl.java | 6 +- .../java/org/jooq/impl/ReferenceImpl.java | 4 +- .../main/java/org/jooq/impl/ResultImpl.java | 6 +- .../main/java/org/jooq/impl/RowCondition.java | 16 ++-- .../java/org/jooq/impl/RowInCondition.java | 4 +- .../main/java/org/jooq/impl/RowIsNull.java | 4 +- .../org/jooq/impl/RowSubqueryCondition.java | 4 +- .../java/org/jooq/impl/SortFieldList.java | 2 +- .../main/java/org/jooq/impl/TableAlias.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Tools.java | 76 +++++++++---------- .../java/org/jooq/tools/LoggerListener.java | 2 +- jOOQ/src/main/resources/META-INF/ABOUT.txt | 1 + 34 files changed, 113 insertions(+), 110 deletions(-) diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java index 37390d3869..980eadfe51 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGeneratorStrategy.java @@ -231,9 +231,10 @@ public abstract class AbstractGeneratorStrategy implements GeneratorStrategy { @Override public final List getJavaIdentifiers(Collection definitions) { - List result = new ArrayList(); + List nonNull = nonNull(definitions); + List result = new ArrayList(nonNull.size()); - for (Definition definition : nonNull(definitions)) { + for (Definition definition : nonNull) { result.add(getJavaIdentifier(definition)); } @@ -247,9 +248,10 @@ public abstract class AbstractGeneratorStrategy implements GeneratorStrategy { @Override public final List getFullJavaIdentifiers(Collection definitions) { - List result = new ArrayList(); + List nonNull = nonNull(definitions); + List result = new ArrayList(nonNull.size()); - for (Definition definition : nonNull(definitions)) { + for (Definition definition : nonNull) { result.add(getFullJavaIdentifier(definition)); } @@ -310,4 +312,4 @@ public abstract class AbstractGeneratorStrategy implements GeneratorStrategy { else return null; } -} \ No newline at end of file +} diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java index 7973a1c66d..a0aa40fa77 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -1403,8 +1403,8 @@ public class JavaGenerator extends AbstractGenerator { } } - List arguments = new ArrayList(); - List calls = new ArrayList(); + List arguments = new ArrayList(degree); + List calls = new ArrayList(degree); for (int i = 1; i <= degree; i++) { TypedElementDefinition column = columns.get(i - 1); @@ -1459,7 +1459,7 @@ public class JavaGenerator extends AbstractGenerator { // [#3130] Invalid UDTs may have a degree of 0 // [#3176] Avoid generating constructors for tables with more than 255 columns (Java's method argument limit) if (degree > 0 && degree < 256) { - List arguments = new ArrayList(); + List arguments = new ArrayList(degree); for (int i = 0; i < degree; i++) { final TypedElementDefinition column = columns.get(i); @@ -2394,7 +2394,7 @@ public class JavaGenerator extends AbstractGenerator { final String className = getStrategy().getJavaClassName(e, Mode.ENUM); final List interfaces = out.ref(getStrategy().getJavaClassImplements(e, Mode.ENUM)); final List literals = e.getLiterals(); - final List identifiers = new ArrayList(); + final List identifiers = new ArrayList(literals.size()); for (int i = 0; i < literals.size(); i++) { String identifier = convertToIdentifier(literals.get(i), language); @@ -3284,7 +3284,7 @@ public class JavaGenerator extends AbstractGenerator { // [#3010] Invalid UDTs may have no attributes. Avoid generating this constructor in that case int size = getTypedElements(tableOrUDT).size(); if (size > 0) { - List nulls = new ArrayList(); + List nulls = new ArrayList(size); for (TypedElementDefinition column : getTypedElements(tableOrUDT)) // Avoid ambiguities between a single-T-value constructor diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java index 8d7fc34469..4fc6cb3ced 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaWriter.java @@ -202,7 +202,7 @@ public class JavaWriter extends GeneratorWriter { @Override protected List ref(List clazz, int keepSegments) { - List result = new ArrayList(); + List result = new ArrayList(clazz == null ? 0 : clazz.size()); if (clazz != null) { for (String c : clazz) { diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/MatcherStrategy.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/MatcherStrategy.java index a1c14e4b28..c33b306f27 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/MatcherStrategy.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/MatcherStrategy.java @@ -182,9 +182,10 @@ public class MatcherStrategy extends DefaultGeneratorStrategy { } private final List split(String result) { - List list = new ArrayList(); + String[] split = result.split(","); + List list = new ArrayList(split.length); - for (String string : result.split(",")) + for (String string : split) list.add(string.trim()); return list; diff --git a/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/jpa/AttributeConverterExtractor.java b/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/jpa/AttributeConverterExtractor.java index 50fcfd00ea..b4dca29ef6 100644 --- a/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/jpa/AttributeConverterExtractor.java +++ b/jOOQ-meta-extensions/src/main/java/org/jooq/meta/extensions/jpa/AttributeConverterExtractor.java @@ -169,7 +169,7 @@ final class AttributeConverterExtractor implements Integrator { } private final List entityClassNames() { - List result = new ArrayList(); + List result = new ArrayList(classes.size()); for (Class klass : classes) result.add(klass.getName()); diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java index d9ea8394ff..f399da69d6 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/AbstractDatabase.java @@ -1335,7 +1335,7 @@ public abstract class AbstractDatabase implements Database { } private final List getConfiguredEnums() { - List result = new ArrayList(); + List result = new ArrayList(configuredCustomTypes.size()); for (EnumType enumType : configuredEnumTypes) { String name = enumType.getName(); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java b/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java index 252502cbe8..fcd8c4919a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractCursor.java @@ -181,7 +181,7 @@ abstract class AbstractCursor implements Formattable, Iterable for (int index = 0; index < fields.fields.length; index++) { if (Number.class.isAssignableFrom(fields.fields[index].getType())) { - List decimalPlacesList = new ArrayList(); + List decimalPlacesList = new ArrayList(1 + buffer.size()); // Initialize decimalPlacesList.add(0); @@ -205,7 +205,7 @@ abstract class AbstractCursor implements Formattable, Iterable colMaxWidth = isNumCol ? NUM_COL_MAX_WIDTH : format.maxColWidth(); // Collect all widths for the column - List widthList = new ArrayList(); + List widthList = new ArrayList(1 + buffer.size()); // Add column name width first widthList.add(min(colMaxWidth, max(format.minColWidth(), fields.fields[index].getName().length()))); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java index 9cffd4ebd9..6d4e735ca8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractDMLQuery.java @@ -573,7 +573,7 @@ abstract class AbstractDMLQuery extends AbstractQuery { case HSQLDB: default: { - List names = new ArrayList(); + List names = new ArrayList(returningResolvedAsterisks.size()); RenderNameStyle style = configuration().settings().getRenderNameStyle(); for (Field field : returningResolvedAsterisks) { diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java index 93cad59fd3..58bb8913ba 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractField.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractField.java @@ -947,7 +947,7 @@ abstract class AbstractField extends AbstractNamed implements Field { @Override public final Condition in(Collection values) { - List> fields = new ArrayList>(); + List> fields = new ArrayList>(values.size()); for (Object value : values) fields.add(Tools.field(value, this)); @@ -987,7 +987,7 @@ abstract class AbstractField extends AbstractNamed implements Field { @Override public final Condition notIn(Collection values) { - List> fields = new ArrayList>(); + List> fields = new ArrayList>(values.size()); for (Object value : values) fields.add(Tools.field(value, this)); diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java index bd75906bbe..57295b6ab0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractRoutine.java @@ -426,7 +426,7 @@ public abstract class AbstractRoutine extends AbstractNamed implements Routin private final int executeSelectFromPOSTGRES() { DSLContext create = create(configuration); - List> fields = new ArrayList>(); + List> fields = new ArrayList>(1 + outParameters.size()); if (returnParameter != null) fields.add(DSL.field(DSL.name(getName()), returnParameter.getDataType())); for (Parameter p : outParameters) @@ -1606,7 +1606,7 @@ public abstract class AbstractRoutine extends AbstractNamed implements Routin RenderContext local = create(ctx).renderContext(); toSQLQualifiedName(local); - List> fields = new ArrayList>(); + List> fields = new ArrayList>(getInParameters().size()); for (Parameter parameter : getInParameters()) { // [#1183] [#3533] Skip defaulted parameters diff --git a/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java b/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java index c5a675e9a6..ed4455b2aa 100644 --- a/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java +++ b/jOOQ/src/main/java/org/jooq/impl/BatchSingle.java @@ -200,7 +200,7 @@ final class BatchSingle implements BatchBindStep { // [#4062] Make sure we collect also repeated named parameters ParamCollector collector = new ParamCollector(configuration, false); collector.visit(query); - List> params = new ArrayList>(); + List> params = new ArrayList>(collector.resultList.size()); for (Entry> entry : collector.resultList) params.add(entry.getValue()); @@ -263,7 +263,7 @@ final class BatchSingle implements BatchBindStep { } private final int[] executeStatic() { - List queries = new ArrayList(); + List queries = new ArrayList(allBindValues.size()); for (Object[] bindValues : allBindValues) { for (int i = 0; i < bindValues.length; i++) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java b/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java index 7f5c86682d..e9ea781567 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DAOImpl.java @@ -399,7 +399,7 @@ public abstract class DAOImpl, P, T> implements DAO } private /* non-final */ List records(Collection

objects, boolean forUpdate) { - List result = new ArrayList(); + List result = new ArrayList(objects.size()); Field[] pk = pk(); for (P object : objects) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DDL.java b/jOOQ/src/main/java/org/jooq/impl/DDL.java index b7733d42fa..b836efb1c2 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDL.java @@ -86,9 +86,9 @@ final class DDL { } private final List alterTableAddConstraints(Table table) { - List result = new ArrayList(); - - for (Constraint constraint : constraints(table)) + List constraints = constraints(table); + List result = new ArrayList(constraints.size()); + for (Constraint constraint : constraints) result.add(ctx.alterTable(table).add(constraint)); return result; diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index edb8d9710c..bbd1480b01 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -20642,7 +20642,7 @@ public class DSL { */ @Support public static RowN row(Collection values) { - Collection> fields = new ArrayList>(); + Collection> fields = new ArrayList>(values.size()); for (Object o : values) fields.add(o instanceof Field ? (Field) o : val(o)); diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index ff11ce5787..1122e66592 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -704,10 +704,10 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri @Override public List extractBindValues(QueryPart part) { - List result = new ArrayList(); - ParamCollector collector = new ParamCollector(configuration(), false); collector.visit(part); + + List result = new ArrayList(collector.resultList.size()); for (Entry> entry : collector.resultList) result.add(entry.getValue().getValue()); @@ -1459,7 +1459,7 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri return new ResultImpl(configuration()); } else { - List> fields = new ArrayList>(); + List> fields = new ArrayList>(strings.get(0).length); int firstRow; if (header) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java index 99964d0b23..be9c1250be 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultRecordMapper.java @@ -391,7 +391,7 @@ public class DefaultRecordMapper implements RecordMapper klassType = Tools.ktKClass().type(); Method getJavaClass = jvmClassMappingKt.type().getMethod("getJavaClass", klassType); - List parameterNames = new ArrayList(); + List parameterNames = new ArrayList(parameters.size()); Class[] parameterTypes = new Class[parameters.size()]; for (int i = 0; i < parameterTypes.length; i++) { diff --git a/jOOQ/src/main/java/org/jooq/impl/DivideBy.java b/jOOQ/src/main/java/org/jooq/impl/DivideBy.java index b1d35ae909..e0e6c0ad5a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DivideBy.java +++ b/jOOQ/src/main/java/org/jooq/impl/DivideBy.java @@ -95,7 +95,7 @@ implements */ private final Table table() { ConditionProviderImpl selfJoin = new ConditionProviderImpl(); - List> select = new ArrayList>(); + List> select = new ArrayList>(returning.size()); Table outer = dividend.as("dividend"); for (Field field : returning) { diff --git a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java index f7c2d72b50..fdc2b7930b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java +++ b/jOOQ/src/main/java/org/jooq/impl/FieldMapsForInsert.java @@ -186,7 +186,7 @@ final class FieldMapsForInsert extends AbstractQueryPart { Select select = null; for (int row = 0; row < rows; row++) { - List> fields = new ArrayList>(); + List> fields = new ArrayList>(values.size()); for (List> list : values.values()) fields.add(list.get(row)); diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index cf4001f427..fbaeef9753 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -646,7 +646,7 @@ final class InsertQueryImpl extends AbstractStoreQuery impl // [#6462] MySQL ON DUPLICATGE KEY UPDATE clause // All conflicting keys are considered - List>> result = new ArrayList>>(); + List>> result = new ArrayList>>(table.getKeys().size()); for (UniqueKey key : table.getKeys()) result.add(key.getFields()); diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONReader.java b/jOOQ/src/main/java/org/jooq/impl/JSONReader.java index eead974df4..d84814426c 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONReader.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONReader.java @@ -101,9 +101,9 @@ final class JSONReader implements Closeable { } private final void readRecords(LinkedHashMap> jsonRoot) { - records = new ArrayList(); - - for (Object record : jsonRoot.get("records")) { + LinkedList rootRecords = jsonRoot.get("records"); + records = new ArrayList(rootRecords.size()); + for (Object record : rootRecords) { String[] v = new String[fieldNames.length]; int i = 0; diff --git a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java index 4a8165b377..79cbbbd619 100755 --- a/jOOQ/src/main/java/org/jooq/impl/JoinTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JoinTable.java @@ -185,11 +185,11 @@ implements @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public final List> getReferences() { - List> result = new ArrayList>(); - - result.addAll(lhs.getReferences()); - result.addAll(rhs.getReferences()); - + List> lhsReferences = lhs.getReferences(); + List> rhsReferences = rhs.getReferences(); + List> result = new ArrayList>(lhsReferences.size() + rhsReferences.size()); + result.addAll(lhsReferences); + result.addAll(rhsReferences); return (List) result; } diff --git a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java index 5b96302b71..1163cac59b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MergeImpl.java @@ -55,6 +55,7 @@ import static org.jooq.impl.DSL.exists; import static org.jooq.impl.DSL.insertInto; import static org.jooq.impl.DSL.notExists; import static org.jooq.impl.DSL.nullSafe; +import static org.jooq.impl.DSL.row; import static org.jooq.impl.Keywords.K_AND; import static org.jooq.impl.Keywords.K_AS; import static org.jooq.impl.Keywords.K_DELETE_WHERE; @@ -1209,8 +1210,8 @@ implements // ------------------------------ Table src; if (upsertSelect != null) { - List> v = new ArrayList>(); Row row = upsertSelect.fieldsRow(); + List> v = new ArrayList>(row.size()); for (int i = 0; i < row.size(); i++) { v.add(row.field(i).as("s" + (i + 1))); @@ -1221,7 +1222,7 @@ implements src = DSL.select(v).from(upsertSelect).asTable("src"); } else { - List> v = new ArrayList>(); + List> v = new ArrayList>(getUpsertValues().size()); for (int i = 0; i < getUpsertValues().size(); i++) { v.add(getUpsertValues().get(i).as("s" + (i + 1))); diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index efe55195d4..391874aa60 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -382,7 +382,7 @@ final class MetaImpl extends AbstractMeta { } }); - List> result = new ArrayList>(); + List> result = new ArrayList>(tables.size()); for (Record table : tables) { String catalog = table.get(0, String.class); String schema = table.get(1, String.class); @@ -581,7 +581,6 @@ final class MetaImpl extends AbstractMeta { @Override @SuppressWarnings("unchecked") public List> getReferences() { - List> references = new ArrayList>(); Result result = meta(new MetaFunction() { @Override public Result run(DatabaseMetaData meta) throws SQLException { @@ -620,6 +619,7 @@ final class MetaImpl extends AbstractMeta { for (Schema schema : getSchemas()) schemas.put(schema.getName(), schema); + List> references = new ArrayList>(groups.size()); for (Entry> entry : groups.entrySet()) { Schema schema = schemas.get(entry.getKey().get(1)); @@ -846,7 +846,6 @@ final class MetaImpl extends AbstractMeta { @Override @SuppressWarnings("unchecked") public final List> getReferences() { - List> references = new ArrayList>(); Result result = meta(new MetaFunction() { @Override public Result run(DatabaseMetaData meta) throws SQLException { @@ -885,6 +884,7 @@ final class MetaImpl extends AbstractMeta { for (Schema schema : getSchemas()) schemas.put(schema.getName(), schema); + List> references = new ArrayList>(groups.size()); for (Entry> entry : groups.entrySet()) { Schema schema = schemas.get(entry.getKey().get(1)); diff --git a/jOOQ/src/main/java/org/jooq/impl/ReferenceImpl.java b/jOOQ/src/main/java/org/jooq/impl/ReferenceImpl.java index 40091030ce..1d46090844 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ReferenceImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ReferenceImpl.java @@ -169,7 +169,7 @@ final class ReferenceImpl extends AbstractKe * Extract a list of values from a set of records given some fields */ private static List extractValues(Collection records, TableField field2) { - List result = new ArrayList(); + List result = new ArrayList(records.size()); for (R record : records) result.add(record.get(field2)); @@ -181,7 +181,7 @@ final class ReferenceImpl extends AbstractKe * Extract a list of row value expressions from a set of records given some fields */ private static List extractRows(Collection records, TableField[] fields) { - List rows = new ArrayList(); + List rows = new ArrayList(records.size()); for (R record : records) { Object[] values = new Object[fields.length]; diff --git a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java index 9d66a2f81b..eb96684b3a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ResultImpl.java @@ -351,7 +351,7 @@ final class ResultImpl extends AbstractCursor implements Re @Override public final List> intoMaps() { - List> list = new ArrayList>(); + List> list = new ArrayList>(size()); for (R record : this) list.add(record.intoMap()); @@ -537,7 +537,7 @@ final class ResultImpl extends AbstractCursor implements Re Map, E> map = new LinkedHashMap, E>(); for (R record : this) { - List keyValueList = new ArrayList(); + List keyValueList = new ArrayList(keys.length); for (Field key : keys) keyValueList.add(record.get(key)); @@ -1399,7 +1399,7 @@ final class ResultImpl extends AbstractCursor implements Re @Override public final List map(RecordMapper mapper) { - List result = new ArrayList(); + List result = new ArrayList(size()); for (R record : this) result.add(mapper.map(record)); diff --git a/jOOQ/src/main/java/org/jooq/impl/RowCondition.java b/jOOQ/src/main/java/org/jooq/impl/RowCondition.java index ec59c3bf7d..625a184474 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowCondition.java @@ -115,7 +115,7 @@ final class RowCondition extends AbstractCondition { // Regular comparison predicate emulation if ((comparator == EQUALS || comparator == NOT_EQUALS) && EMULATE_EQ_AND_NE.contains(dialect.family())) { - List conditions = new ArrayList(); + List conditions = new ArrayList(left.fields().length); Field[] leftFields = left.fields(); Field[] rightFields = right.fields(); @@ -156,16 +156,16 @@ final class RowCondition extends AbstractCondition { = (comparator == GREATER_OR_EQUAL) ||(comparator == LESS_OR_EQUAL); - // The following algorithm emulates the equivalency of these expressions: - // (A, B, C) > (X, Y, Z) - // (A > X) OR (A = X AND B > Y) OR (A = X AND B = Y AND C > Z) - List outer = new ArrayList(); - Field[] leftFields = left.fields(); Field[] rightFields = right.fields(); + // The following algorithm emulates the equivalency of these expressions: + // (A, B, C) > (X, Y, Z) + // (A > X) OR (A = X AND B > Y) OR (A = X AND B = Y AND C > Z) + List outer = new ArrayList(1 + leftFields.length); + for (int i = 0; i < leftFields.length; i++) { - List inner = new ArrayList(); + List inner = new ArrayList(1 + i); for (int j = 0; j < i; j++) inner.add(leftFields[j].equal((Field) rightFields[j])); @@ -237,4 +237,4 @@ final class RowCondition extends AbstractCondition { return CLAUSES; } } -} \ No newline at end of file +} diff --git a/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java b/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java index 4f8ae38de0..30fae94e12 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowInCondition.java @@ -104,7 +104,7 @@ final class RowInCondition extends AbstractCondition { private final QueryPartInternal delegate(Configuration configuration) { if (EMULATE_IN.contains(configuration.family())) { - List conditions = new ArrayList(); + List conditions = new ArrayList(right.size()); for (Row row : right) conditions.add(new RowCondition(left, row, EQUALS)); @@ -151,4 +151,4 @@ final class RowInCondition extends AbstractCondition { return comparator == IN ? CLAUSES_IN : CLAUSES_IN_NOT; } } -} \ No newline at end of file +} diff --git a/jOOQ/src/main/java/org/jooq/impl/RowIsNull.java b/jOOQ/src/main/java/org/jooq/impl/RowIsNull.java index 29d0f103ba..948f25e40f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowIsNull.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowIsNull.java @@ -109,7 +109,7 @@ final class RowIsNull extends AbstractCondition { // CUBRID 9.0.0 and HSQLDB have buggy implementations of the NULL predicate. // Informix doesn't implement the RVE IS NULL predicate. if (EMULATE_NULL.contains(configuration.family())) { - List conditions = new ArrayList(); + List conditions = new ArrayList(row.fields().length); for (Field field : row.fields()) conditions.add(isNull ? field.isNull() : field.isNotNull()); @@ -141,4 +141,4 @@ final class RowIsNull extends AbstractCondition { return isNull ? CLAUSES_NULL : CLAUSES_NOT_NULL; } } -} \ No newline at end of file +} diff --git a/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java b/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java index 75efcfb256..82dbda7c77 100644 --- a/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java +++ b/jOOQ/src/main/java/org/jooq/impl/RowSubqueryCondition.java @@ -153,7 +153,7 @@ final class RowSubqueryCondition extends AbstractCondition { else { String table = render == null ? "t" : render.nextAlias(); - List names = new ArrayList(); + List names = new ArrayList(left.size()); for (int i = 0; i < left.size(); i++) names.add(table + "_" + i); @@ -254,4 +254,4 @@ final class RowSubqueryCondition extends AbstractCondition { return CLAUSES; } } -} \ No newline at end of file +} diff --git a/jOOQ/src/main/java/org/jooq/impl/SortFieldList.java b/jOOQ/src/main/java/org/jooq/impl/SortFieldList.java index 863e9af5f5..a684a90a13 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SortFieldList.java +++ b/jOOQ/src/main/java/org/jooq/impl/SortFieldList.java @@ -101,7 +101,7 @@ final class SortFieldList extends QueryPartList> { } final List> fields() { - List> result = new ArrayList>(); + List> result = new ArrayList>(size()); for (SortField field : this) result.add(((SortFieldImpl) field).getField()); diff --git a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java index 4d036e1c01..c844ac8b34 100644 --- a/jOOQ/src/main/java/org/jooq/impl/TableAlias.java +++ b/jOOQ/src/main/java/org/jooq/impl/TableAlias.java @@ -87,9 +87,9 @@ final class TableAlias extends AbstractTable { */ @SuppressWarnings({ "rawtypes", "unchecked" }) private final Fields init(Name[] fieldAliases) { - List> result = new ArrayList>(); Row row = this.alias.wrapped().fieldsRow(); int size = row.size(); + List> result = new ArrayList>(size); for (int i = 0; i < size; i++) { Field field = row.field(i); diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index dc9d737252..f9022076fc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -671,7 +671,7 @@ final class Tools { * Turn a {@link Result} into a list of {@link Row} */ static final List rows(Result result) { - List rows = new ArrayList(); + List rows = new ArrayList(result.size()); for (Record record : result) rows.add(record.valuesRow()); @@ -1421,11 +1421,12 @@ final class Tools { * values created from the argument objects. */ static final List> fields(T[] values) { - List> result = new ArrayList>(); + int length = values == null ? 0 : values.length; + List> result = new ArrayList>(length); - if (values != null) - for (T value : values) - result.add(field(value)); + for (int i = 0; i < length; i++) { + result.add(field(values[i])); + } return result; } @@ -1439,12 +1440,11 @@ final class Tools { * values created from the argument objects. */ static final List> fields(Object[] values, Field field) { - List> result = new ArrayList>(); + int length = values == null || field == null ? 0 : values.length; + List> result = new ArrayList>(length); - if (values != null && field != null) { - for (int i = 0; i < values.length; i++) { - result.add(field(values[i], field)); - } + for (int i = 0; i < length; i++) { + result.add(field(values[i], field)); } return result; @@ -1459,12 +1459,11 @@ final class Tools { * values created from the argument objects. */ static final List> fields(Object[] values, Field[] fields) { - List> result = new ArrayList>(); + int length = values == null || fields == null ? 0 : Math.min(values.length, fields.length); + List> result = new ArrayList>(length); - if (values != null && fields != null) { - for (int i = 0; i < values.length && i < fields.length; i++) { - result.add(field(values[i], fields[i])); - } + for (int i = 0; i < length; i++) { + result.add(field(values[i], fields[i])); } return result; @@ -1479,12 +1478,11 @@ final class Tools { * values created from the argument objects. */ static final List> fields(Object[] values, Class type) { - List> result = new ArrayList>(); + int length = values == null || type == null ? 0 : values.length; + List> result = new ArrayList>(length); - if (values != null && type != null) { - for (int i = 0; i < values.length; i++) { - result.add(field(values[i], type)); - } + for (int i = 0; i < length; i++) { + result.add(field(values[i], type)); } return result; @@ -1499,12 +1497,11 @@ final class Tools { * values created from the argument objects. */ static final List> fields(Object[] values, Class[] types) { - List> result = new ArrayList>(); + int length = values == null || types == null ? 0 : Math.min(values.length, types.length); + List> result = new ArrayList>(length); - if (values != null && types != null) { - for (int i = 0; i < values.length && i < types.length; i++) { - result.add(field(values[i], types[i])); - } + for (int i = 0; i < length; i++) { + result.add(field(values[i], types[i])); } return result; @@ -1519,12 +1516,11 @@ final class Tools { * values created from the argument objects. */ static final List> fields(Object[] values, DataType type) { - List> result = new ArrayList>(); + int length = values == null || type == null ? 0 : values.length; + List> result = new ArrayList>(length); - if (values != null && type != null) { - for (int i = 0; i < values.length; i++) { - result.add(field(values[i], type)); - } + for (int i = 0; i < length; i++) { + result.add(field(values[i], type)); } return result; @@ -1539,21 +1535,23 @@ final class Tools { * values created from the argument objects. */ static final List> fields(Object[] values, DataType[] types) { - List> result = new ArrayList>(); + int length = values == null || types == null ? 0 : Math.min(values.length, types.length); + List> result = new ArrayList>(length); - if (values != null && types != null) - for (int i = 0; i < values.length && i < types.length; i++) - result.add(field(values[i], types[i])); + for (int i = 0; i < length; i++) { + result.add(field(values[i], types[i])); + } return result; } static final List> inline(T[] values) { - List> result = new ArrayList>(); + int length = values == null ? 0 : values.length; + List> result = new ArrayList>(length); - if (values != null) - for (T value : values) - result.add(DSL.inline(value)); + for (int i = 0; i < length; i++) { + result.add(DSL.inline(values[i])); + } return result; } @@ -2230,7 +2228,7 @@ final class Tools { return queryParts(new Object[] { null }); } else { - List result = new ArrayList(); + List result = new ArrayList(substitutes.length); for (Object substitute : substitutes) { diff --git a/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java b/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java index c7845132bc..f55e775768 100644 --- a/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java +++ b/jOOQ/src/main/java/org/jooq/tools/LoggerListener.java @@ -173,7 +173,7 @@ public class LoggerListener extends DefaultExecuteListener { private Record record(Configuration configuration, Routine routine) { Record result = null; - List> fields = new ArrayList>(); + List> fields = new ArrayList>(1 + routine.getOutParameters().size()); Parameter returnParam = routine.getReturnParameter(); if (returnParam != null) fields.add(field(name(returnParam.getName()), returnParam.getDataType())); diff --git a/jOOQ/src/main/resources/META-INF/ABOUT.txt b/jOOQ/src/main/resources/META-INF/ABOUT.txt index a65a2c4a4c..1d90471115 100644 --- a/jOOQ/src/main/resources/META-INF/ABOUT.txt +++ b/jOOQ/src/main/resources/META-INF/ABOUT.txt @@ -48,6 +48,7 @@ Authors and contributors of jOOQ or parts of jOOQ in alphabetical order: - Sven Jacobs - Szymon Jachim - Terence Zhang +- Timothy Wilson - Timur Shaidullin - Thomas Darimont - Tsukasa Kitachi