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: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to