Add missing hashCode() implementation
Summary: Whenever a Java class implements equals(), it has to implement hashCode(), otherwise there might be weird behavior when inserting instances of the class in a hash map for example. This adds two missing hashCode() implementations and extends tests to test the hashCode() implementations. Test Plan: make jtest Reviewers: rven, igor, sdong, yhchiang Reviewed By: yhchiang Subscribers: anthony, dhruba, leveldb Differential Revision: https://reviews.facebook.net/D43017
This commit is contained in:
parent
f73c801432
commit
6a82fba75f
2
Makefile
2
Makefile
@ -1037,7 +1037,7 @@ rocksdbjava: $(java_libobjects)
|
|||||||
jclean:
|
jclean:
|
||||||
cd java;$(MAKE) clean;
|
cd java;$(MAKE) clean;
|
||||||
|
|
||||||
jtest:
|
jtest: rocksdbjava
|
||||||
cd java;$(MAKE) sample;$(MAKE) test;
|
cd java;$(MAKE) sample;$(MAKE) test;
|
||||||
|
|
||||||
jdb_bench:
|
jdb_bench:
|
||||||
|
@ -105,6 +105,11 @@ abstract class AbstractSlice<T> extends RocksObject {
|
|||||||
return compare0(nativeHandle_, other.nativeHandle_);
|
return compare0(nativeHandle_, other.nativeHandle_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return toString().hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* If other is a slice object, then
|
* If other is a slice object, then
|
||||||
* we defer to {@link #compare(AbstractSlice) compare}
|
* we defer to {@link #compare(AbstractSlice) compare}
|
||||||
|
@ -117,6 +117,18 @@ public class WBWIRocksIterator extends AbstractRocksIterator<WriteBatchWithIndex
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates a hash code for the Write Entry. NOTE: The hash code is based
|
||||||
|
* on the string representation of the key, so it may not work correctly
|
||||||
|
* with exotic custom comparators.
|
||||||
|
*
|
||||||
|
* @return The hash code for the Write Entry
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return (key == null) ? 0 : key.hashCode();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean equals(Object other) {
|
public boolean equals(Object other) {
|
||||||
if(other == null) {
|
if(other == null) {
|
||||||
|
@ -52,6 +52,7 @@ public class SliceTest {
|
|||||||
slice = new Slice("abc");
|
slice = new Slice("abc");
|
||||||
slice2 = new Slice("abc");
|
slice2 = new Slice("abc");
|
||||||
assertThat(slice.equals(slice2)).isTrue();
|
assertThat(slice.equals(slice2)).isTrue();
|
||||||
|
assertThat(slice.hashCode() == slice2.hashCode()).isTrue();
|
||||||
} finally {
|
} finally {
|
||||||
if (slice != null) {
|
if (slice != null) {
|
||||||
slice.dispose();
|
slice.dispose();
|
||||||
|
@ -252,6 +252,7 @@ public class WriteBatchWithIndexTest {
|
|||||||
it = wbwi.newIterator();
|
it = wbwi.newIterator();
|
||||||
it.seekToFirst();
|
it.seekToFirst();
|
||||||
assertThat(it.entry().equals(expected[0])).isTrue();
|
assertThat(it.entry().equals(expected[0])).isTrue();
|
||||||
|
assertThat(it.entry().hashCode() == expected[0].hashCode()).isTrue();
|
||||||
} finally {
|
} finally {
|
||||||
if(it != null) {
|
if(it != null) {
|
||||||
it.dispose();
|
it.dispose();
|
||||||
|
Loading…
Reference in New Issue
Block a user