Main.java Source code

Java tutorial

Introduction

Here is the source code for Main.java

Source

//package com.java2s;
/**
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Main {
    /**
     * Insert an element into an ascending/descending array, and keep the order. 
     * @param ascending
     *            if true, the array is sorted in ascending order,
     *            otherwise it is in descending order.
     * 
     */
    static <T extends Comparable<T>> void binaryInsert(List<T> list, T value, boolean ascending) {

        int position = Collections.binarySearch(list, value, getComparator(ascending, (T) null));
        if (position < 0) {
            position = (-position) - 1;
        }
        list.add(position, value);
    }

    /**
     * Returns a comparator based on whether the order is ascending or not.
     * Has a dummy parameter to make sure generics can infer the type correctly.
     */
    static <T extends Comparable<T>> Comparator<T> getComparator(boolean ascending, T dummy) {
        Comparator<T> comp;
        if (ascending) {
            comp = new Comparator<T>() {
                public int compare(T o1, T o2) {
                    return o1.compareTo(o2);
                }
            };
        } else {
            comp = new Comparator<T>() {
                public int compare(T o1, T o2) {
                    return o2.compareTo(o1);
                }
            };
        }
        return comp;
    }
}