If you use .Net and Java, then http://jorudolph.wordpress.com/2010/04/21/net-generics-implementation/ provides a compare & contrast view.
http://www.codeproject.com/KB/java/GenericsInJavaPartII.aspx is an explanation with sample code showing the implementation's implications.
Briefly stated....
Part A:
The compiler wipes out ("erases") the generic bits (so ArrayList turns into ArrayList). Then, when an object is pulled out of the collection (say, al.get(0)), the compiler inserts the code that converts the data type (aka "boxing") (turning al.get(0) into (StackExchange)al.get(0)).
Part B:
There is no Part B. :)
Part Z:
Generics in Java were implemented about a decade after the language was first released. Consequently, possibly in the name of backwards compatibility, generics in Java only act as syntactic sugar. Syntactic sugar is a fancy way to say "You could write this code yourself but the compiler lets you type in a shortcut instead." For example, before generics showed up in Java, you could already write (StackExchange)al.get(0). The compiler merely inserts the code for you if you use generics.