Я бы отошел от массивов, если длина:
Я предлагаю использовать один из различных [111 ] реализации из JDK, в частности ArrayList
и LinkedList
.
Первый использует внутренний массив, который может быть расширен, если элемент добавлен, и приведет к тому, что массив будет слишком маленьким (он делает это сам по себе, поэтому не нужно беспокоиться).
Второй - это список узлов, что означает, что для каждого добавляемого вами элемента новый (внутренний) объект узла добавляется к последнему узлу.
Вы, конечно, должны изменить свой код для этого.
_cities
как List
: private List _cities
_cities = new ArrayList<>();
или _cities = new LinkedList<>();
_cities.add(new City(cityName, XcityCenter, YcityCenter, XStationPoint, YStationPoint, numOfResidents, numOfNeighborhoods));
В вашем getNumOfResidents
вы можете использовать следующий фрагмент (который использует API потокового Java, представленный в Java 8):
return _cities.stream()
.mapToLong(City::getNumOfResidents)
.sum();
для getCities()
вам нужно изменить тип возвращаемого значения на List
и использовать следующее: return new ArrayList<>(_cities)
или return new LinkedList<>(_cities)
в зависимости от реализации, которую вы хотите использовать.
Я не думаю, что существует категорический ответ на Ваш вопрос. Но я могу дать Вам некоторый трудный выигранный совет. Вот некоторые вещи рассмотреть:
Это является трудоемким для записи маршалинга и кода unmarhsalling, особенно в первый раз.
Необходимо будет провести довольно мало времени, изучая нюансы библиотеки DOM (Xerces или его эквивалент).
Существует много дублирования, таким образом, Вы будете в конечном счете управляться к записи некоторых классов помощника.
Вам будет нужно много модульных тестов, чтобы удостовериться, что Вы покрыли все свои базы в области дополнительных элементов и атрибутов.
Рассмотрение того списка, довольно легко сказать, "что это - то, что JAXB делает для меня". Сделав для этого в течение многих лет, я сказал бы, что JAXB экономит Вам довольно мало времени и усилия, особенно последнее повторение JAXB в Java 5/6.
Но если бы Вы идете с JAXB существует один урок, мы научились на горьком опыте, который я хотел бы провести:
*** Не делайте для разрешения сгенерированной утечке классов JAXB в приложение.
Как Вы сказали в своем вопросе, это связывает Ваше целое приложение со способом, которым JAXB делает вещь. Если JAXB должен быть заменен (существует много причин, почему Вы могли бы сделать это в будущем), затем, Вы столкнетесь с оспариванием, и болезненная задача (доверяйте мне, мы сделали это, и мы никогда не будем входить в то положение снова).
Теперь мы всегда скрываемся, наш JAXB генерировал классы позади фасада или фабрики, отображающейся от классов JAXB до нашего собственного домена POJOs, которые имеют необходимое поведение. Мы думаем о JAXB, поскольку мы делаем JDBC; JAXB является просто другим источником данных, другой способ получить данные к и от нашего домена POJOs. Домен POJOs является секретным соусом, и мы управляем, как они кодируются и как они используются. JAXB является просто инструментом для маршалинга и немаршалинга.
Я не хочу запускать долгую и бесконечную войну падуба с вопросом, но на основе моего опыта - если можно использовать инструмент, который генерирует весь код для Вас, и не требуйте надежного JAR. Код, который будет сгенерирован, будет ужасен, но он будет работать, пока Вы не будете ясно видеть потребность изготовить вручную рукописный код. В большинстве случаев Вы не должны будете делать этого. Я сожалею, что не могу дать мгновенную рекомендацию на какой инструмент использовать.