You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2004/02/18 01:26:59 UTC
cvs commit: jakarta-jmeter/src/jorphan/org/apache/jorphan/collections ListedHashTree.java
sebb 2004/02/17 16:26:59
Modified: src/jorphan/org/apache/jorphan/collections
ListedHashTree.java
Log:
Fix hashCode to take note of order; simplify equals()
Revision Changes Path
1.7 +103 -35 jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java
Index: ListedHashTree.java
===================================================================
RCS file: /home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- ListedHashTree.java 11 Feb 2004 23:46:32 -0000 1.6
+++ ListedHashTree.java 18 Feb 2004 00:26:58 -0000 1.7
@@ -173,45 +173,53 @@
return order.toArray();
}
+ // Make sure the hashCode depends on the order as well
public int hashCode()
{
- return data.hashCode() * 7 + 3;
+ int hc = 17;
+ hc = hc * 37 + (order == null ? 0 : order.hashCode());
+ hc = hc * 37 + super.hashCode();
+ return hc;
}
public boolean equals(Object o)
{
- boolean flag = true;
- if (o instanceof ListedHashTree)
- {
- ListedHashTree oo = (ListedHashTree) o;
- Iterator it = order.iterator();
- Iterator it2 = oo.order.iterator();
- if (size() != oo.size())
- {
- flag = false;
- }
- while (it.hasNext() && it2.hasNext() && flag)
- {
- if (!it.next().equals(it2.next()))
- {
- flag = false;
- }
- }
- if (flag)
- {
- it = order.iterator();
- while (it.hasNext() && flag)
- {
- Object temp = it.next();
- flag = get(temp).equals(oo.get(temp));
- }
- }
- }
- else
- {
- flag = false;
- }
- return flag;
+ if (!(o instanceof ListedHashTree)) return false;
+ ListedHashTree lht = (ListedHashTree) o;
+ return (super.equals(lht) && order.equals(lht.order));
+
+// boolean flag = true;
+// if (o instanceof ListedHashTree)
+// {
+// ListedHashTree oo = (ListedHashTree) o;
+// Iterator it = order.iterator();
+// Iterator it2 = oo.order.iterator();
+// if (size() != oo.size())
+// {
+// flag = false;
+// }
+// while (it.hasNext() && it2.hasNext() && flag)
+// {
+// if (!it.next().equals(it2.next()))
+// {
+// flag = false;
+// }
+// }
+// if (flag)
+// {
+// it = order.iterator();
+// while (it.hasNext() && flag)
+// {
+// Object temp = it.next();
+// flag = get(temp).equals(oo.get(temp));
+// }
+// }
+// }
+// else
+// {
+// flag = false;
+// }
+// return flag;
}
public Set keySet()
@@ -254,5 +262,65 @@
assertEquals(tree.getTree("key").getArray()[0], "value");
assertNotNull(tree.getTree("key").get("value"));
}
+
+ public void testEqualsAndHashCode() throws Exception
+ {
+ ListedHashTree tree1 = new ListedHashTree("abcd");
+ ListedHashTree tree2 = new ListedHashTree("abcd");
+ ListedHashTree tree3 = new ListedHashTree("abcde");
+ ListedHashTree tree4 = new ListedHashTree("abcde");
+
+ assertTrue(tree1.equals(tree1));
+ assertTrue(tree1.equals(tree2));
+ assertTrue(tree2.equals(tree1));
+ assertTrue(tree2.equals(tree2));
+ assertTrue(tree1.hashCode()==tree2.hashCode());
+
+ assertTrue(tree3.equals(tree3));
+ assertTrue(tree3.equals(tree4));
+ assertTrue(tree4.equals(tree3));
+ assertTrue(tree4.equals(tree4));
+ assertTrue(tree3.hashCode()==tree4.hashCode());
+
+ assertNotSame(tree1,tree2);
+ assertNotSame(tree1,tree3);
+ assertFalse(tree1.equals(tree3));
+ assertFalse(tree3.equals(tree1));
+ assertFalse(tree1.equals(tree4));
+ assertFalse(tree4.equals(tree1));
+
+ assertFalse(tree2.equals(tree3));
+ assertFalse(tree3.equals(tree2));
+ assertFalse(tree2.equals(tree4));
+ assertFalse(tree4.equals(tree2));
+
+ tree1.add("abcd",tree3);
+ assertFalse(tree1.equals(tree2));
+ assertFalse(tree2.equals(tree1));
+
+ tree2.add("abcd",tree4);
+ assertTrue(tree1.equals(tree2));
+ assertTrue(tree2.equals(tree1));
+ assertTrue(tree1.hashCode()==tree2.hashCode());
+
+ tree1.add("a1");
+ tree1.add("a2");
+ //tree1.add("a3");
+ tree2.add("a2");
+ tree2.add("a1");
+
+ assertFalse(tree1.equals(tree2));
+ assertFalse(tree2.equals(tree1));
+ if (tree1.hashCode()==tree2.hashCode())
+ {
+ //This is not a requirement
+ System.out.println("WARN: unequal ListedHashTrees should not have equal hashcodes");
+
+ }
+
+ tree4.add("abcdef");
+ assertFalse(tree3.equals(tree4));
+ assertFalse(tree4.equals(tree3));
+ }
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org