Start here. This is the direct spoken answer to practice first.
Overview
An unchecked warning means the compiler cannot prove the generic promise, not that the code has been proven safe.
A raw type omits the generic argument, such as List instead of List<String>. It exists mainly for compatibility with code written before generics. Raw access can insert a value of the wrong type into a parameterized collection, causing heap pollution and a ClassCastException later when another caller retrieves it under the promised type. An unchecked warning is therefore a signal that the compiler could not verify type safety.