You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@orc.apache.org by do...@apache.org on 2021/07/16 16:44:24 UTC
[orc] branch main updated: ORC-844: Improve hashCode Methods (#747)
This is an automated email from the ASF dual-hosted git repository.
dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/orc.git
The following commit(s) were added to refs/heads/main by this push:
new b46712c ORC-844: Improve hashCode Methods (#747)
b46712c is described below
commit b46712c9e7e286a653ba21be9f983d9168a45491
Author: belugabehr <12...@users.noreply.github.com>
AuthorDate: Fri Jul 16 12:44:17 2021 -0400
ORC-844: Improve hashCode Methods (#747)
### What changes were proposed in this pull request?
Auto-generate some hashCode methods.
### Why are the changes needed?
Better hash code values for better distributions; less code.
### How was this patch tested?
No changes to functionality. Use existing unit tests.
---
java/core/src/java/org/apache/orc/TypeDescription.java | 15 ++++++++-------
.../java/org/apache/orc/impl/ColumnStatisticsImpl.java | 5 +++--
.../src/java/org/apache/orc/impl/MaskDescriptionImpl.java | 8 ++++----
java/core/src/java/org/apache/orc/util/BloomFilter.java | 6 +-----
.../src/java/org/apache/orc/mapred/OrcStruct.java | 9 ++-------
.../src/test/org/apache/orc/mapred/TestOrcStruct.java | 4 ++--
6 files changed, 20 insertions(+), 27 deletions(-)
diff --git a/java/core/src/java/org/apache/orc/TypeDescription.java b/java/core/src/java/org/apache/orc/TypeDescription.java
index 644a30a..1b8f1cb 100644
--- a/java/core/src/java/org/apache/orc/TypeDescription.java
+++ b/java/core/src/java/org/apache/orc/TypeDescription.java
@@ -380,13 +380,14 @@ public class TypeDescription
@Override
public int hashCode() {
- long result = category.ordinal() * 4241 + maxLength + precision * 13 + scale;
- if (children != null) {
- for(TypeDescription child: children) {
- result = result * 6959 + child.hashCode();
- }
- }
- return (int) result;
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + category.hashCode();
+ result = prime * result + children.hashCode();
+ result = prime * result + maxLength;
+ result = prime * result + precision;
+ result = prime * result + scale;
+ return result;
}
@Override
diff --git a/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java b/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java
index 7f8180e..df1b729 100644
--- a/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java
+++ b/java/core/src/java/org/apache/orc/impl/ColumnStatisticsImpl.java
@@ -1864,9 +1864,10 @@ public class ColumnStatisticsImpl implements ColumnStatistics {
@Override
public int hashCode() {
+ final int prime = 31;
int result = super.hashCode();
- result = 31 * result + (int) minimum;
- result = 31 * result + (int) maximum;
+ result = prime * result + (int) (maximum ^ (maximum >>> 32));
+ result = prime * result + (int) (minimum ^ (minimum >>> 32));
return result;
}
}
diff --git a/java/core/src/java/org/apache/orc/impl/MaskDescriptionImpl.java b/java/core/src/java/org/apache/orc/impl/MaskDescriptionImpl.java
index 45fc7f4..721aec0 100644
--- a/java/core/src/java/org/apache/orc/impl/MaskDescriptionImpl.java
+++ b/java/core/src/java/org/apache/orc/impl/MaskDescriptionImpl.java
@@ -118,10 +118,10 @@ public class MaskDescriptionImpl implements DataMaskDescription,
@Override
public int hashCode() {
- int result = name.hashCode();
- for (String p: parameters) {
- result = result * 101 + p.hashCode();
- }
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((name == null) ? 0 : name.hashCode());
+ result = prime * result + Arrays.hashCode(parameters);
return result;
}
diff --git a/java/core/src/java/org/apache/orc/util/BloomFilter.java b/java/core/src/java/org/apache/orc/util/BloomFilter.java
index dd75b9a..0041cba 100644
--- a/java/core/src/java/org/apache/orc/util/BloomFilter.java
+++ b/java/core/src/java/org/apache/orc/util/BloomFilter.java
@@ -324,11 +324,7 @@ public class BloomFilter {
@Override
public int hashCode() {
- int result = 0;
- for(long l: data) {
- result = (int) (result * 13 + l);
- }
- return result;
+ return Arrays.hashCode(data);
}
}
}
diff --git a/java/mapreduce/src/java/org/apache/orc/mapred/OrcStruct.java b/java/mapreduce/src/java/org/apache/orc/mapred/OrcStruct.java
index d24d3a7..c02054a 100644
--- a/java/mapreduce/src/java/org/apache/orc/mapred/OrcStruct.java
+++ b/java/mapreduce/src/java/org/apache/orc/mapred/OrcStruct.java
@@ -34,6 +34,7 @@ import org.apache.orc.TypeDescription;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
+import java.util.Arrays;
public final class OrcStruct implements WritableComparable<OrcStruct> {
@@ -147,13 +148,7 @@ public final class OrcStruct implements WritableComparable<OrcStruct> {
@Override
public int hashCode() {
- int result = fields.length;
- for(Object field: fields) {
- if (field != null) {
- result ^= field.hashCode();
- }
- }
- return result;
+ return Arrays.hashCode(fields);
}
@Override
diff --git a/java/mapreduce/src/test/org/apache/orc/mapred/TestOrcStruct.java b/java/mapreduce/src/test/org/apache/orc/mapred/TestOrcStruct.java
index e279c2f..0b1ebdb 100644
--- a/java/mapreduce/src/test/org/apache/orc/mapred/TestOrcStruct.java
+++ b/java/mapreduce/src/test/org/apache/orc/mapred/TestOrcStruct.java
@@ -63,7 +63,7 @@ public class TestOrcStruct {
expected.setFieldValue(0, new IntWritable(1));
expected.setFieldValue(1, new LongWritable(2));
expected.setFieldValue(2, new Text("wow"));
- assertEquals(147710, expected.hashCode());
+ assertEquals(178524, expected.hashCode());
assertNotEquals(expected, actual);
TestOrcList.cloneWritable(expected, actual);
assertEquals(expected, actual);
@@ -72,7 +72,7 @@ public class TestOrcStruct {
expected.setFieldValue(2, null);
TestOrcList.cloneWritable(expected, actual);
assertEquals(expected, actual);
- assertEquals(3, expected.hashCode());
+ assertEquals(29791, expected.hashCode());
expected.setFieldValue(1, new LongWritable(111));
assertEquals(111, ((LongWritable) expected.getFieldValue(1)).get());
TestOrcList.cloneWritable(expected, actual);