I am following along with [this example](http://rosettacode.org/wiki/Quicksort#Java) of Quicksort implemented in Java, on Rosettacode. From what I understand this is supposed to take in an array of things that implement the Comparable interface, and that the type is inferred during runtime. I wrapped this up in a little class with a main method, but get an slew of errors about the inferred type. I am relative new to Java and not familiar with this construct yet. 

```
import java.util.List;
import java.util.LinkedList;

public class QuickSortExample {

    public static <E extends Comparable<? super E>> List<E> quickSort(List<E> arr) {
        if (arr.size() <= 1) return arr;
        E pivot = arr.getFirst();

        List<E> less = new LinkedList<E>();
        List<E> pivotList = new LinkedList<E>();
        List<E> more = new LinkedList<E>();

        for (E i: arr) {
            if (i.compareTo(pivot) < 0) less.add(i);
            else if (i.compareTo(pivot) > 0) more.add(i);
            else pivotList.add(i);
        }

        less = quickSort(less);
        more = quickSort(more);
        less.addAll(pivotList);
        less.addAll(more);
        return less;
     }

     public static void main(String[] args){
        int[] myArray = new int[]{2,3,1,6,2,87,5,3,546,9,2,3,8,111};
        int[] mySortedArray = quickSort(myArray);
        System.out.println(mySortedArray);
    }
}

```

And I get these errors on compile

```
 $ javac QuickSortExample.java
 QuickSortExample.java:11: cannot find symbol
 symbol  : method getFirst()
 location: interface java.util.List<E>
        E pivot = arr.getFirst();
                 ^
 QuickSortExample.java:37: <E>quickSort(java.util.List<E>) in QuickSortExample cannot be applied to (int[])
        int[] mySortedArray = quickSort(myArray);
                            ^
 2 errors

```

I have 3 questions. 

1) What does the ? mean in the following statement?

```
<E extends Comparable<? super E>> List<E> quickSort(List<E> arr) 

```

2) It seems like this is made to work on LinkedList objects, due to the getFirst() method. Is that correct? If so, can I get this to work on a general List? Would I have to cast my Array of ints as List. I'm a little confused here. I have been consulting both the [List](http://docs.oracle.com/javase/6/docs/api/java/util/List.html) and [LinkedList](http://docs.oracle.com/javase/6/docs/api/java/util/LinkedList.html) javadocs.

3) Can I accomplish this all with the List object, instead of LinkedList? Is there a reason LinkedList was chosen for this example that I dont understand? Also, if I wanted to call this with an Array of Integers, would I have to cast(?) that input differently on the way in since it doesnt look like Array inherits from List?

Sorry for the really basic questions, just learning Java for real for the first time.