001 // License: GPL. For details, see LICENSE file. 002 package org.openstreetmap.josm.tools; 003 import java.util.ArrayList; 004 005 /** 006 * A pair. 007 */ 008 public final class Pair<A,B> { 009 public A a; 010 public B b; 011 012 public Pair(A a, B b) { 013 this.a = a; 014 this.b = b; 015 } 016 017 @Override public int hashCode() { 018 return a.hashCode() + b.hashCode(); 019 } 020 021 @Override public boolean equals(Object other) { 022 if (other instanceof Pair<?, ?>) { 023 Pair<?, ?> o = (Pair<?, ?>)other; 024 return a.equals(o.a) && b.equals(o.b); 025 } else 026 return false; 027 } 028 029 public static <T> ArrayList<T> toArrayList(Pair<T, T> p) { 030 ArrayList<T> l = new ArrayList<T>(2); 031 l.add(p.a); 032 l.add(p.b); 033 return l; 034 } 035 036 public static <T> Pair<T,T> sort(Pair<T,T> p) { 037 if (p.b.hashCode() < p.a.hashCode()) { 038 T tmp = p.a; 039 p.a = p.b; 040 p.b = tmp; 041 } 042 return p; 043 } 044 045 @Override 046 public String toString() { 047 return "<"+a+","+b+">"; 048 } 049 050 /* convenience constructor method */ 051 public static <U,V> Pair<U,V> create(U u, V v) { 052 return new Pair<U,V>(u,v); 053 } 054 }