As I see it, the advantages of a list over an array are pretty obvious:
- Generics provide more precise typing:
List<Integer>, List<? extends Number>, List<? super Integer>. - A List interface has a bunch useful methods:
addAll,removeetc. While for arrays all standard operations except get/set must be performed in a procedure manner by passing it to a static method. - Collections offer different implementations like
ArrayList,LinkedList, unmodifieable and synchronized lists, which can be hidden under a common List interface. - OOB length control.
As disadvantages I can only mention the absence of syntactic sugar and a runtime type check. At the same time supporting of both structures requires frequent using of asList and toArray methods, which makes code less readable. So I am curious if there are any important benefits of using arrays that I miss.
Arrays are more efficient, both in terms of processing time and memory footprint. This particularly applies if you are operating on primitive types, such as
intorlong, sinceListrequires all elements to be wrapped in anObject(such asIntegerorLong). While the autoboxing features introduced by Java 5 reduces the amount of code you need for such wrapping and unwrapping, it does not remove the performance issues, as wrapper objects are still being created.However, most applications probably do not have any performance bottlenecks related to these issues, so in most cases,
Listand other collections should do fine. In these cases, the ease of programming outweighs the increase in memory or CPU usage, andListis the right choice.