summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2009-01-06 19:23:15 +0000
committerRich Hickey <richhickey@gmail.com>2009-01-06 19:23:15 +0000
commit467568d55ae4f099106107a56dd249fec8c41f5e (patch)
tree49432b04fa942c0a7c01f1806598fc30f7ef5cb2
parent2ea265f5e1d6de1b41a3f49e33f5d3fc85bd650a (diff)
use same hashCode in seqs and lists as in vectors
-rw-r--r--src/jvm/clojure/lang/ASeq.java5
-rw-r--r--src/jvm/clojure/lang/PersistentList.java5
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);
}