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<NestedField> lazyFieldList() {