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 and eventually attach a
patch.

Thanks again and have a nice day!
Tommaso


2013/1/4 Giuseppe Miscione <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