Collections Data Structure Java

/*
 * Copyright (c) 2002-2003 by OpenSymphony
 * All rights reserved.
 */
import java.lang.reflect.Array;
import java.util.Collection;
import java.util.Map;
/**
 * ContainUtil will check if object 1 contains object 2.
 * Object 1 may be an Object, array, Collection, or a Map
 *
 * @author Matt Baldree (matt@smallleap.com)
 * @version $Revision: 2737 $
 */
public class ContainUtil {
  /**
     * Determine if obj2 exists in obj1.
     *
     * 
     *  
     *      Type Of obj1
     *      Comparison type
     *  
     *  
     *      null
     *      always return false
     *  
     *  
     *      Map
     *      Map containsKey(obj2)
     *  
     *  
     *      Collection
     *      Collection contains(obj2)
     *  
     *  
     *      Array
     *      there's an array element (e) where e.equals(obj2)
     *  
     *  
     *      Object
     *      obj1.equals(obj2)
     *  
     * 
     *
     *
     * @param obj1
     * @param obj2
     * @return
     */
    public static boolean contains(Object obj1, Object obj2) {
        if ((obj1 == null) || (obj2 == null)) {
            //log.debug("obj1 or obj2 are null.");
            return false;
        }
        if (obj1 instanceof Map) {
            if (((Map) obj1).containsKey(obj2)) {
                //log.debug("obj1 is a map and contains obj2");
                return true;
            }
        } else if (obj1 instanceof Collection) {
            if (((Collection) obj1).contains(obj2)) {
                //log.debug("obj1 is a collection and contains obj2");
                return true;
            }
        } else if (obj1.getClass().isArray()) {
            for (int i = 0; i < Array.getLength(obj1); i++) {
                Object value = null;
                value = Array.get(obj1, i);
                if (value.equals(obj2)) {
                    //log.debug("obj1 is an array and contains obj2");
                    return true;
                }
            }
        } else if (obj1.equals(obj2)) {
            //log.debug("obj1 is an object and equals obj2");
            return true;
        }
        //log.debug("obj1 does not contain obj2: " + obj1 + ", " + obj2);
        return false;
    }
}
////////////////
package com.opensymphony.webwork.util;
import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import junit.framework.TestCase;
import com.opensymphony.webwork.util.ContainUtil;
public class ContainUtilTest extends TestCase {
  public void testNull() throws Exception {
    assertFalse(ContainUtil.contains(null, null));
    assertFalse(ContainUtil.contains(new Object(), null));
    assertFalse(ContainUtil.contains(null, new Object()));
  }
  
  public void testSimpleList() throws Exception {
    List l = new ArrayList();
    l.add("one");
    l.add("two");
    
    assertFalse(ContainUtil.contains(l, "three"));
    assertTrue(ContainUtil.contains(l, "one"));
    assertTrue(ContainUtil.contains(l, "two"));
  }
  
  public void testSimpleSet() throws Exception {
    Set s = new LinkedHashSet();
    s.add("one");
    s.add("two");
    
    assertFalse(ContainUtil.contains(s, "thre"));
    assertTrue(ContainUtil.contains(s, "one"));
    assertTrue(ContainUtil.contains(s, "two"));
  }
  
  public void testComplexList() throws Exception {
    List l = new ArrayList();
    l.add(new MyObject("tm_jee", Integer.valueOf("20")));
    l.add(new MyObject("jenny", Integer.valueOf("22")));
    
    assertFalse(ContainUtil.contains(l, new MyObject("paul", Integer.valueOf("50"))));
    assertFalse(ContainUtil.contains(l, new MyObject("tm_jee", Integer.valueOf("44"))));
    assertTrue(ContainUtil.contains(l, new MyObject("tm_jee", Integer.valueOf("20"))));
    assertTrue(ContainUtil.contains(l, new MyObject("jenny", Integer.valueOf("22"))));
  }
  
  public void testComplexMap() throws Exception {
    Set s = new LinkedHashSet();
    s.add(new MyObject("tm_jee", Integer.valueOf("20")));
    s.add(new MyObject("jenny", Integer.valueOf("22")));
    
    assertFalse(ContainUtil.contains(s, new MyObject("paul", Integer.valueOf("50"))));
    assertFalse(ContainUtil.contains(s, new MyObject("tm_jee", Integer.valueOf("44"))));
    assertTrue(ContainUtil.contains(s, new MyObject("tm_jee", Integer.valueOf("20"))));
    assertTrue(ContainUtil.contains(s, new MyObject("jenny", Integer.valueOf("22"))));
  }
  
  public void testObject() throws Exception {
    assertFalse(ContainUtil.contains("aaa", "bbb"));
    assertFalse(ContainUtil.contains(new MyObject("tm_jee", Integer.valueOf("22")), new MyObject("tmjee", Integer.valueOf("22"))));
    assertTrue(ContainUtil.contains("apple", "apple"));
    assertTrue(ContainUtil.contains(new MyObject("tm_jee", Integer.valueOf("22")), new MyObject("tm_jee", Integer.valueOf("22"))));
  }
  public static class MyObject {
    private String name;
    private Integer age;
    
    public MyObject(String name, Integer age) {
      this.name = name;
      this.age = age;
    }
    
    public int hashCode() {
      return this.name.hashCode();
    }
    
    public boolean equals(Object obj) {
      if (obj == null) { return false; }
      if (! (obj instanceof MyObject)) { return false; }
      MyObject tmp = (MyObject) obj;
      if (
          tmp.name.equals(this.name) &&
          tmp.age.equals(this.age)
        ) {
        return true;
      }
      return false;
        
    }
  }
}