import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapOfArrays { private Map map; public MapOfArrays() { super(); this.map = new HashMap(); this.map.put("key1", new String[] { "key1_value1", "key1_Value2" }); this.map.put("key2", new String[] { "key2_value1", "key2_Value2" }); } public boolean equals(Object obj) { if (!(obj instanceof MapOfArrays)) { return false; } final MapOfArrays other = (MapOfArrays) obj; if (other.getMap().size() != this.getMap().size()) { return false; } final Set myKeys = this.getMap().keySet(); final Set otherKeys = other.getMap().keySet(); if (!myKeys.containsAll(otherKeys) && otherKeys.containsAll(myKeys)) { return false; } for (Iterator i = myKeys.iterator(); i.hasNext();) { final Object key = i.next(); final String[] myValue = (String[]) this.getMap().get(key); final String[] otherValue = (String[]) other.getMap().get(key); if (!Arrays.equals(myValue, otherValue)) { return false; } } return true; } public Map getMap() { return this.map; } public int hashCode() { return this.getMap().hashCode(); } public void setMap(Map map) { this.map = map; } public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append(this.getClass().getName()); buffer.append(": {"); final Set myKeys = this.getMap().keySet(); for (Iterator i = myKeys.iterator(); i.hasNext();) { final Object key = i.next(); buffer.append(key); buffer.append("="); buffer.append(Arrays.asList(((String[]) this.getMap().get(key))).toString()); buffer.append(", "); } if (this.getMap().size() > 0) { buffer.delete(buffer.length() - 2, buffer.length()); } buffer.append("}"); return buffer.toString(); } }