Welcome to the list Nathan!
I would be cautious in removing such lazy initialization patterns: even when the array is not immediately allocated, we still often have reasons to not want to allocate the wrapping object.
While of course each such choice relates to a specific context, so this should not be taken as a golden rule nor enforced globally, there are several examples of large classes in Hibernate ORM which *might* need a significant amount of collections to be initialized, but only to deal with very specific corner cases, sometimes only in combination with obscure configurations.
Combining such considerations about instances which are very rarely used with further considerations such as how wide-spread this library is used in the world, and how "hot" some of these code paths are, then I feel we are responsible to make these as efficient as possible. A NPE is certainly something we need to avoid but it's a concern which we can address with just a little bit of care.
I'll also remind that most of such patterns have been introduced only after a problem was noted during profiling; in case of new code I'm occasionally guilty of writing code in such style on first shot, but I generally do so only when I think it's worth it - as I would agree that code readability and ease of maintenance has a value as well.
Finally, remember one nice hint I got from the OpenJDK engineers: a null-check is most often free in terms of code efficiency.
Thanks