package com.superliminal.util; /** * Container for two objects. * Similar to the Pair class in the C++ STL libraries. <br> * * Created Jul 17, 2006 * @author Melinda Green */ public class Pair<T1, T2> { public T1 o1; public T2 o2; public Pair(T1 o1, T2 o2) { this.o1 = o1; this.o2 = o2; } public int hashCode() { int code = 0; if(o1 != null) code = o1.hashCode(); if(o2 != null) code = code/2 + o2.hashCode()/2; return code; } public static boolean same(Object o1, Object o2) { return o1 == null ? o2 == null : o1.equals(o2); } public boolean equals(Object obj) { if( ! (obj instanceof Pair)) return false; Pair p = (Pair)obj; return same(p.o1, this.o1) && same(p.o2, this.o2); } public String toString() { return "Pair{"+o1+", "+o2+"}"; } /** * Simple example test program. */ public static void main(String[] args) { Pair<String, String> p1 = new Pair<String, String>("a", "b"), p2 = new Pair<String, String>("a", null), p3 = new Pair<String, String>("a", "b"), p4 = new Pair<String, String>(null, null); System.out.println(p1.equals(new Pair<Integer, Integer>(1, 2)) + " should be false"); System.out.println(p4.equals(p2) + " should be false"); System.out.println(p2.equals(p4) + " should be false"); System.out.println(p1.equals(p3) + " should be true"); System.out.println(p4.equals(p4) + " should be true"); } }