The Collection classes don't allow primitives so they can enforce type safety. This works into the idea of generics, which you may not have studied yet, but you'll see when you get there. Basically, if I tell my Collection I only want to store Integers in it, but then I try to store a Float, or a Boolean, I'm going to get an error at compile time, where it's easy to fix.

Wrapper classes are great for storing otherwise primitive values in collections, especially because of autoboxing, but that's not their only use.

Fair enough. There's also the matters of internal data structures and interfaces. Many of the Collection classes will store the data in an Object array (Object []) so no primitives there. Even if that weren't an issue, the primitives would require different accessors and mutuators. You can overload the adds, but the gets still return Objects, and the only way around that is to write things method like getAsInt, getAsDouble, etc. Very ugly.