import java.util.Set;
import java.util.HashSet;
import java.util.TreeSet;


public class SetDemo {
  public static void main(String[] args) {
    int n = 10;
    if (args.length == 1) {
      n = Integer.parseInt(args[0]);
    }

    String[] names = {"Seth", "Phil", "Sam", "Fabio", "Bobo", "Tom"};

    Set<String> ds = new TreeSet<>();
    for (String s : names) {
      ds.add(s);
    }
    System.out.println(ds);

    ds.add("Nate");
    System.out.println(ds);

    ds.remove("Bobo");
    System.out.println(ds);

    ds.add("alan");
    System.out.println(ds);

    System.out.println("contains(Phil)=" + ds.contains("Phil"));
    System.out.println("contains(Bill)=" + ds.contains("Bill"));


    long start, stop;
    double elapsed;
    Set<Integer> ds2 = new HashSet<>();

    start = System.nanoTime();
    System.out.print("Adding " + n + " elements...");
    System.out.flush();
    for (int i = 0; i < n; i++) {
      ds2.add(2*i);
    }
    stop=System.nanoTime();
    elapsed = ((double)(stop-start))*1e-9;
    System.out.println("done (" + elapsed + "s)");

    start = System.nanoTime();
    System.out.print("Searching " + 2*n + " elements...");
    System.out.flush();
    for (int i = 0; i < 2*n; i++) {
      ds2.contains(i);
    }
    stop=System.nanoTime();
    elapsed = ((double)(stop-start))*1e-9;
    System.out.println("done (" + elapsed + "s)");

    ds2 = new TreeSet<>();
    start = System.nanoTime();
    System.out.print("Adding " + n + " elements...");
    System.out.flush();
    for (int i = 0; i < n; i++) {
      ds2.add(2*i);
    }
    stop=System.nanoTime();
    elapsed = ((double)(stop-start))*1e-9;
    System.out.println("done (" + elapsed + "s)");

    start = System.nanoTime();
    System.out.print("Searching " + 2*n + " elements...");
    System.out.flush();
    for (int i = 0; i < 2*n; i++) {
      ds2.contains(i);
    }
    stop=System.nanoTime();
    elapsed = ((double)(stop-start))*1e-9;
    System.out.println("done (" + elapsed + "s)");
  }

}
