Here's what I know: NSSets are unordered. Generally, you use them when you want to see if an object is a member of a group. You can filter the set using an NSPredicate. You can turn it into an array. If you call anyObject on a set, you'll get an object, but you can't know ahead of time which object you'll get. Which leads me to my questions: How are objects in NSSets stored? How are they filtered? How does containsObject work? And how does anyObject work?