diff options
author | Rich Hickey <richhickey@gmail.com> | 2009-01-06 19:23:15 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2009-01-06 19:23:15 +0000 |
commit | 467568d55ae4f099106107a56dd249fec8c41f5e (patch) | |
tree | 49432b04fa942c0a7c01f1806598fc30f7ef5cb2 /src | |
parent | 2ea265f5e1d6de1b41a3f49e33f5d3fc85bd650a (diff) |
use same hashCode in seqs and lists as in vectors
Diffstat (limited to 'src')
-rw-r--r-- | src/jvm/clojure/lang/ASeq.java | 5 | ||||
-rw-r--r-- | src/jvm/clojure/lang/PersistentList.java | 5 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/jvm/clojure/lang/ASeq.java b/src/jvm/clojure/lang/ASeq.java index 0fe66004..9e298301 100644 --- a/src/jvm/clojure/lang/ASeq.java +++ b/src/jvm/clojure/lang/ASeq.java @@ -52,16 +52,17 @@ public boolean equals(Object obj){ public int hashCode(){
if(_hash == -1)
{
- int hash = 0;
+ int hash = 1;
for(ISeq s = seq(); s != null; s = s.rest())
{
- hash = Util.hashCombine(hash, Util.hash(s.first()));
+ hash = 31 * hash + (s.first() == null ? 0 : s.first().hashCode());
}
this._hash = hash;
}
return _hash;
}
+
//public Object reduce(IFn f) throws Exception{
// Object ret = first();
// for(ISeq s = rest(); s != null; s = s.rest())
diff --git a/src/jvm/clojure/lang/PersistentList.java b/src/jvm/clojure/lang/PersistentList.java index 59b7932a..536388bf 100644 --- a/src/jvm/clojure/lang/PersistentList.java +++ b/src/jvm/clojure/lang/PersistentList.java @@ -114,6 +114,11 @@ public Object reduce(IFn f, Object start) throws Exception{ static class EmptyList extends Obj implements IPersistentList, Collection{
+ @Override
+ public int hashCode(){
+ return 1;
+ }
+
EmptyList(IPersistentMap meta){
super(meta);
}
|