import java.util.Collection;
import java.util.Random;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.HashSet;
import java.util.TreeSet;
import javax.swing.JOptionPane;
/**
 *This Example compares four Java Collection classes contains method
 *@author Bill Kraynek
 */

public class CollectionComparisons {
    
    /**
     * Generate a Collection of size random Integers
     * @param c is the Collection
     * @param size is the size of the Collection
     */
    public static void getNumbers(Collection<Integer> c, int size) {
        Random r = new Random();
        for( int i = 0; i < size; i++ ) {
            c.add(r.nextInt(5*size));
        } // end for
        System.out.println(c.size());
    } // end getNumbers
    
    public CollectionComparisons() {
        int size = Integer.parseInt(JOptionPane.showInputDialog("Enter the size of the Collections"));
        Collection<Integer> numbers;
        if( size <= 10000) {
            numbers = new ArrayList<Integer>();
            getNumbers(numbers,size);
            Random r = new Random();
            long start = System.currentTimeMillis();
            for( int i = 0; i < size; i++ ) {
                numbers.contains(r.nextInt(5*size));
            }  // end for
            long stop = System.currentTimeMillis();
            JOptionPane.showMessageDialog(null,"ArrayList time = " + (stop-start) + " milliseconds\n");
        } // end if
        numbers = new HashSet<Integer>();
        getNumbers(numbers,size);
        Random r = new Random();
        long start = System.currentTimeMillis();
        for( int i = 0; i < size; i++ ) {
            numbers.contains(r.nextInt(5*size));
        } // end for
        long stop = System.currentTimeMillis();
        JOptionPane.showMessageDialog(null,"HashSet time = " + (stop-start) + " milliseconds\n");
        numbers = new TreeSet<Integer>();
        getNumbers(numbers,size);
        r = new Random();
        start = System.currentTimeMillis();
        for( int i = 0; i < size; i++ ) {
            numbers.contains(r.nextInt(5*size));
        } // end for
        stop = System.currentTimeMillis();
        JOptionPane.showMessageDialog(null,"TreeSet time = " + (stop-start) + " milliseconds\n");      
    }
    
    public static void main(String args[]) {
        new CollectionComparisons();
        System.exit(0);
    } // end main
    
} // end CollectionComparisons
