ArrayLists are fast to get data out of, and has less overhead.
LinkedLists are fast to get data into, and has more overhead.
To elaborate on this:
ArrayLists are based on arrays: you can access data via an index in constant time, however, adding to anywhere but the end requires shuffling the rest of the elements around, which takes linear time. Likewise, once the array they are based on runs out of room, they need to create a bigger one and copy the old data into it (or if you're lucky, some languages can extend the array if there's room on the heap).
LinkedLists are based on nodes of elements linked to each other via pointers. They can grow and shrink nearly effortlessly, as adding an element at any known point is simply creating a new node and updating the neighboring links, which ends up being constant time. They are not good for accessing data via position, as indices are not stored or implied anywhere: that means doing so is linear time. LinkedLists make great basic queues and stacks.
The memory overhead is slightly larger for LinkedList, as they need to store a pointer for each element, but on most machines this is trivial (assuming you have good garbage collection/created the "gang of three" correctly).
All in all, for your problem, you could use either with proper practice. I like linked-lists myself.
for(String s : names)
bit, though. Only syntax they ever put us through was
for(initial state; termination state; change after each iteration)
If that format makes any sense.
Aye, both are valid. The former is often called the "enhanced for-loop" (although IMHO, both have their uses), and is used to iterate over collections in a much more readable manner.
In general, its syntax looks like this in Java.
for(ElementType e : myCollection)
You then can use "e" within the body of the for loop to retrieve data from the current element (and sometimes modify it).