diff options
author | Jisi Liu <jisi.liu@gmail.com> | 2015-02-06 15:55:04 -0800 |
---|---|---|
committer | Jisi Liu <jisi.liu@gmail.com> | 2015-02-06 15:55:04 -0800 |
commit | d9a6f27bc333587fad88b3bc1f53b370a016ccd0 (patch) | |
tree | 0f59bedbd0b6d133b5c95219088e4f3fd6f2a700 /javanano | |
parent | 1536e93349b0f8e703060e5efddb91169c93786d (diff) | |
download | protobuf-d9a6f27bc333587fad88b3bc1f53b370a016ccd0.tar.gz protobuf-d9a6f27bc333587fad88b3bc1f53b370a016ccd0.tar.bz2 protobuf-d9a6f27bc333587fad88b3bc1f53b370a016ccd0.zip |
implement hashCode() for JavaNano maps.
Diffstat (limited to 'javanano')
-rw-r--r-- | javanano/src/main/java/com/google/protobuf/nano/InternalNano.java | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/javanano/src/main/java/com/google/protobuf/nano/InternalNano.java b/javanano/src/main/java/com/google/protobuf/nano/InternalNano.java index 044c30dd..f3144652 100644 --- a/javanano/src/main/java/com/google/protobuf/nano/InternalNano.java +++ b/javanano/src/main/java/com/google/protobuf/nano/InternalNano.java @@ -531,4 +531,23 @@ public final class InternalNano { } return a.equals(b); } + + public static <K, V> int hashCode(Map<K, V> map) { + if (map == null) { + return 0; + } + int result = 0; + for (Entry<K, V> entry : map.entrySet()) { + result += hashCodeForMap(entry.getKey()) + ^ hashCodeForMap(entry.getValue()); + } + return result; + } + + private static int hashCodeForMap(Object o) { + if (o instanceof byte[]) { + return Arrays.hashCode((byte[]) o); + } + return o.hashCode(); + } } |