Agreed, the shift is a better hashcode. Pushed, thanks Stephen On 6 December 2011 10:52, Greg Inozemtsev <g...@nzmsv.com> wrote: > Hello > > I noticed that the latest change to the hashCode for standard duration > fields introduces collisions in PeriodType. Because the hashCode of a > PeriodType is the sum of the hashCodes of its components, a PeriodType > with a Week and Month will have the same hashCode as one with Seconds, > and so on. > > The following patch makes the hashCode a bitmask, eliminating the > collisions. A test is included. > > > > diff -urp > joda-time-2.0.orig/src/main/java/org/joda/time/DurationFieldType.java > joda-time-2.0/src/main/java/org/joda/time/DurationFieldType.java > --- joda-time-2.0.orig/src/main/java/org/joda/time/DurationFieldType.java > 2011-12-06 > 05:03:22.193579179 -0500 > +++ joda-time-2.0/src/main/java/org/joda/time/DurationFieldType.java > 2011-12-06 > 05:46:07.713317900 -0500 > @@ -275,7 +275,7 @@ public abstract class DurationFieldType > /** @inheritdoc */ > @Override > public int hashCode() { > - return iOrdinal; > + return (1 << iOrdinal); > } > > public DurationField getField(Chronology chronology) { > diff -urp joda-time-2.0.orig/src/test/java/org/joda/time/TestPeriodType.java > joda-time-2.0/src/test/java/org/joda/time/TestPeriodType.java > --- joda-time-2.0.orig/src/test/java/org/joda/time/TestPeriodType.java > 2011-12-06 > 01:56:23.390957347 -0500 > +++ joda-time-2.0/src/test/java/org/joda/time/TestPeriodType.java > 2011-12-06 > 05:48:17.881963372 -0500 > @@ -593,6 +593,21 @@ public class TestPeriodType extends Test > } > } > > + public void testForFields7() throws Exception { > + DurationFieldType[] types = new DurationFieldType[] { > + DurationFieldType.weeks(), > + DurationFieldType.months(), > + }; > + DurationFieldType[] types2 = new DurationFieldType[] { > + DurationFieldType.seconds(), > + }; > + PeriodType type = PeriodType.forFields(types); > + PeriodType type2 = PeriodType.forFields(types2); > + assertEquals(false, type == type2); > + assertEquals(false, type.equals(type2); > + assertEquals(false, type.hashCode() == type2.hashCode()); > + } > + > //----------------------------------------------------------------------- > public void testMaskYears() throws Exception { > PeriodType type = PeriodType.standard().withYearsRemoved(); > > ------------------------------------------------------------------------------ > Cloud Services Checklist: Pricing and Packaging Optimization > This white paper is intended to serve as a reference, checklist and point of > discussion for anyone considering optimizing the pricing and packaging model > of a cloud services business. Read Now! > http://www.accelacomm.com/jaw/sfnl/114/51491232/ > _______________________________________________ > Joda-interest mailing list > Joda-interest@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/joda-interest
------------------------------------------------------------------------------ Cloud Services Checklist: Pricing and Packaging Optimization This white paper is intended to serve as a reference, checklist and point of discussion for anyone considering optimizing the pricing and packaging model of a cloud services business. Read Now! http://www.accelacomm.com/jaw/sfnl/114/51491232/ _______________________________________________ Joda-interest mailing list Joda-interest@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/joda-interest