import java.util.Arrays;
import java.lang.UnsupportedOperationException;
import edu.princeton.cs.algs4.Queue;

// immutable "set" of objects of type T
// (ignore the "extends Comparable<T>"; it just is to be able to
// sort the arrays
public class MyCollection<T extends Comparable<T>> {

    // immutable array of objects
    private final T[] objects;
    
    public MyCollection(T[] original) {

        // create defensive copy using Arrays.copyOf(T[] original, int newLength)
        // https://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html#copyOf(T[],%20int)
        this.objects = Arrays.copyOf(original, original.length);

        // sort the array
        Arrays.sort(this.objects);
    }

    // compare this collection to another object y
    public boolean equals(Object y) {
        
        // ***************************************************************

        // STANDARD EQUALS STUFF

        // <to complete>
        
        // ***************************************************************

        // CODE THAT IS SPECIFIC TO MyCollection's EQUALITY TESTING
        
        // <to complete>

        throw new UnsupportedOperationException("not implemented yet");
    }


    public static void main(String[] args) {

        // two equal collections
        MyCollection c1 = new MyCollection( new Integer[] { 1, 5, 3, 2 } );
        MyCollection c2 = new MyCollection( new Integer[] { 5, 1, 2, 3 } );

        // smaller collection
        MyCollection c3 = new MyCollection( new Integer[] { 5, 1, 2 } );

        // null collection
        MyCollection c4 = null;

        // different collection
        MyCollection c5 = new MyCollection( new Integer[] { 5, 1, 4, 9 } );
        
        // could use assert here
        System.out.println("c1 == c2?: " +c1.equals(c2));
        System.out.println("c1 == c3?: " +c1.equals(c3));
        System.out.println("c1 == c4?: " +c1.equals(c4));
        System.out.println("c1 == c5?: " +c1.equals(c5));
        
    }
    
}