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    }