Java supports generics as of version 1.5 to allow type-safe operations on parameterized types like List<String>. Generics eliminate the need for explicit casting when adding and retrieving elements. Wildcard types like List<?> provide flexibility but are more limited than specific types. Generic methods allow algorithms to operate on types in a generic way through type parameters.