java.util.Collections类中两个sort方法的定义很奇怪,哪位能给解释一下:

public static <T> void sort(List<T> list,  Comparator<? super T> c) 1、既然该方法无返回值(void),第一个“<T>”有什么作用? 2、“?”代表什么含义? 3、“super”起什么作用? 4、基于2、3:“<? super T>”如何理解?

public static <T extends Comparable<? super T>> void sort(List<T> list) 1、“extends”如何理解? 2、其余同上