This is an example of data abstraction - the client is presented with public methods that allow items to be added/removed to/from the list, etc. But the client needs to know nothing about how the list is implemented in order to use the list effectively and is indeed prevented from accessing anything concerned with the implementation.
Does that help?
Paul
List<int> myList = new ArrayList<int>();
but this is:
List<Integer> myList = new ArrayList<Integer>();
Can you now see why we use .equalsI() and not ==?
Paul