IMHO I would recommend the usage of collections in most cases. Especially in interfaces and public methods.
For example if you can choose between:
public List<Integer> getFoo(); public int[] getFoo();
The first method gives you the opportunity to change the implementation ArrayList vs LinkedList, etc. Or to return an immutable version via Collections.unmodifiableList().
If you return an array in an interface method you might be forced to make a defensive copy before returning it, since you cannot prevent the client from changing the array content. Furthermore lists have only few disadvantages compared to arrays, you can almost always replace an array with an ArrayList for example.
Place where arrays still make sense would be varargs methods, or algorithmic code, where the speed benefit of operations like clone and System.arraycopy are relevant.