Considering the two functions:
public static void myFunction(List<?> list); public static <T> void myFunction(List<T> list); Please explain why we have included <T> before myFuction, and what does it signify?
When you use <?> you are telling the virtual machine that you don't know what type of object will be in the List, could one type could be more than one type. List<?> is the equivalent of List from previous 1.4 Java version when you could add to a list any type of object and there was no constraint on that.
When you use <T> you are defining a generic method. You are telling the compiler that the List<T> is a list of objet of type T, which will determined from the call to the method, but you enforce that all object from List are of the same type, T. You include <T> before the the function name to specify that you are defining a generic method, and the compiler to know that T should be treated as a type and not as variable.
T is the name of a generic parameter. You can think of it as "for some type T". If you haven't read the generics tutorial, I would recommend it: docs.oracle.com/javase/tutorial/java/generics
public static <T> void myFunction(List<T> list);(<T>was placed before return type).