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 }