The AddRange function simply adds all of the objects in the added range to the arraylist. In your example, your arraylist would contain three items accessible at positions 0, 1 and 2.
Think of it in terms as appending the array to the arraylist, it just gets tacked on the end.
Exactly. It works like the zip or merge functions available in other languages, suching iterating throught the items in the object to be added and pushing them onto the add of the arraylist.
Auto increasing of the size of the arraylist is taken care of too so you don't need to worry about extending the arraylist past it initialised size before calling addRange.