Util.java Source code

Java tutorial

Introduction

Here is the source code for Util.java

Source

import java.util.TreeMap;

/**
 * <p>Static methods for doing useful math</p><hr>
 *
 * @author  : $Author: brian $
 * @version : $Revision: 1.1 $
 *
 * <hr><p><font size="-1" color="#336699"><a href="http://www.mbari.org">
 * The Monterey Bay Aquarium Research Institute (MBARI)</a> provides this
 * documentation and code &quot;as is&quot;, with no warranty, express or
 * implied, of its quality or consistency. It is provided without support and
 * without obligation on the part of MBARI to assist in its use, correction,
 * modification, or enhancement. This information should not be published or
 * distributed to third parties without specific written permission from
 * MBARI.</font></p><br>
 *
 * <font size="-1" color="#336699">Copyright 2002 MBARI.<br>
 * MBARI Proprietary Information. All rights reserved.</font><br><hr><br>
 *
 */

public class Util {

    /**
     * Returns an array of indices indicating the order the data should be sorted
     * in. Duplicate values are discarded with the first one being kept. This method
     * is useful when a number of data arrays have to be sorted based on the values in
     * some coordinate array, such as time.
     *
     * To convert a array of values to a sorted monooic array try: <br>
     *    double[] x;  // some 1-D array of data <br>
     *    int[] i = MathUtilities.uniqueSort(x); <br>
     *    double[] xSorted = MathUtilities.orderVector(x, i);<br><br>
     *
     * @param x An array of data that is to be sorted.
     * @return order An array of indexes such that y = Array.sort(x) and
     * y = x(order) are the same.
     */
    public static final synchronized int[] uniqueSort(double[] x) {
        TreeMap tm = new TreeMap();
        for (int i = 0; i < x.length; i++) {
            Double key = new Double(x[i]);
            boolean exists = tm.containsKey(key);
            if (exists) {
                // Do nothing. Ignore duplicate keys
            } else {
                tm.put(key, new Integer(i));
            }
        }
        Object[] values = tm.values().toArray();
        int[] order = new int[values.length];
        for (int i = 0; i < values.length; i++) {
            Integer tmp = (Integer) values[i];
            order[i] = tmp.intValue();
        }
        return order;
    }
}