Избегайте static
- это особенность процедурного программирования. Используйте его только для служебных методов и общедоступных констант.
И нет - статика! = Неизменяемая, они не имеют ничего общего. Static - это глобальное состояние, которое не является поточно-ориентированным, и вы не можете иметь более одного вхождения статических данных в вашем приложении.
Неизменяемый означает, что экземпляр объекта не может изменить свое внутреннее состояние. Например, String
- как только вы его построите, вы не сможете его изменить. Это не имеет ничего общего со статичностью.
Что касается первого вопроса - для геттера вполне нормально выставить внутреннюю коллекцию, особенно ее только для чтения.