Oh right, I haven't read the comment on the interface method!

Il 04/01/2013 11:59, Reto Bachmann-Gmür ha scritto:
On Fri, Jan 4, 2013 at 10:22 AM, Giuseppe Miscione <
g.misci...@innovationengineering.eu> wrote:

Hi Reto,
why this will affect also the interface?

Because it's defined wrongly in the the javadoc comment for hashCode in the
triple interface. The comments needs to be fixed.

Cheers,
Reto

Il 04/01/2013 10:17, Reto Bachmann-Gmür ha scritto:

  Yes, I confirm. Thanks Giuseppe.
The bug affects the interface definition of Triple, not just the
implementation.

Cheers,
Reto

On Fri, Jan 4, 2013 at 10:06 AM, Tommaso Teofili
<tommaso.teof...@gmail.com>**wrote:

  Hi Giuseppe,
thanks a lot! This seems to me to be a bug (if anyone else feels I'm
wrong
please chime in), feel free to open a Jira issue on
https://issues.apache.org/**jira/browse/CLEREZZA<https://issues.apache.org/jira/browse/CLEREZZA>and
 eventually attach a
patch.

Thanks again and have a nice day!
Tommaso


2013/1/4 Giuseppe Miscione 
<g.miscione@**innovationengineering.eu<g.misci...@innovationengineering.eu>
  Hi all,
I was looking at the hashCode implementation in the
org.apache.clerezza.rdf.core.****impl.TripleImpl and I found that this
method has this code:

public int hashCode() {
      return (subject.hashCode() >> 1) ^ subject.hashCode() ^
(subject.hashCode() << 1);
}

This function uses only the subject of the triple. Wondering why only
one
part of the triple is used, I looked at the implementation of the
corresponding class in the Jena library, and I found that there the

method

is implemented in this way:

public int hashCode() {
      return (subject.hashCode() >> 1) ^ predicate.hashCode() ^
(object.hashCode() << 1);
}

And the reason is that in this way the triple (subject, predicate,

object)

has a differente hash code than (object, predicate, subject).

Now, it seems to be a small bug in the TripleImpl class. This error
doesn't prevent to use TripleImpl as keys in HashMaps because the
corresponding equals method is correct and coherent ( a.equals(b) =>
a.hashCode() == b.hashCode() ), but it can yield to performance

degradation

when storing a lot of triples with the same subject in an HashMap.

Regards,
Giuseppe



Reply via email to