From f25c89b9ba69448ffa1ce6cbba968065fc788463 Mon Sep 17 00:00:00 2001 From: wzx140 Date: Thu, 12 Dec 2024 20:44:26 +0800 Subject: [PATCH] API: add hashcode cache in StructType --- api/src/main/java/org/apache/iceberg/types/Types.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/api/src/main/java/org/apache/iceberg/types/Types.java b/api/src/main/java/org/apache/iceberg/types/Types.java index 927b3a5065ad..4a3c4551646b 100644 --- a/api/src/main/java/org/apache/iceberg/types/Types.java +++ b/api/src/main/java/org/apache/iceberg/types/Types.java @@ -723,6 +723,9 @@ public int hashCode() { public static class StructType extends NestedType { private static final Joiner FIELD_SEP = Joiner.on(", "); + private static final int NO_HASHCODE = Integer.MIN_VALUE; + + private transient int hashCode = NO_HASHCODE; public static StructType of(NestedField... fields) { return of(Arrays.asList(fields)); @@ -824,7 +827,10 @@ public boolean equals(Object o) { @Override public int hashCode() { - return Objects.hash(NestedField.class, Arrays.hashCode(fields)); + if (hashCode == NO_HASHCODE) { + hashCode = Objects.hash(NestedField.class, Arrays.hashCode(fields)); + } + return hashCode; } private List lazyFieldList() {