2013-03-12 4 views
1

Привет Я хочу, чтобы скопировать массив ... и я не хочу использовать «клон», который медленно, чтобы скопировать .. я попытался ArrayCopy и copyOf, но он не работаетКак скопировать (память) массив в java?

for (int i = 0; i < arraySize; i++) { 
      City[] tempCities = Arrays.copyOf(cities, cities.length) ; 
      distance = 0; 
      tempCities[i].setVisited(); 
} 

, но это измените мой исходный массив (города). Кто-нибудь знает, как копировать и не иметь другого указателя на тот же объект

+1

Почему вы копируете массив на каждой итерации цикла? Кроме того, определите «не работает». – Perception

+0

Значит, вам нужна глубокая копия другими словами? –

+2

Возможный дубликат [Глубокая копия массива объектов] (http://stackoverflow.com/questions/3947227/deep-copy-of-an-object-array) –

ответ

2

Настоящая проблема заключается в том, что вы храните ссылки в массиве. Если вы хотите, чтобы объекты в новом массиве были независимы от объектов в исходном массиве, вы должны сделать глубокую копию. Для этого cities[i].clone() - твой друг.

Что касается вашей проблемы с производительностью, это вполне возможно из-за того, что вы копируете массив во время каждой итерации цикла. Это очень расточительно; достаточно одного экземпляра.

+0

города массива - это тип города (координата x, координата y, булево посещение), проблема в логическом значении не меняется ... Город [] tempCities = Arrays.copyOf (города, города.length); , когда я изменяю свойство tempCities, меняя даже свойство города. es: tempCities [i] .setVisited(); это изменение городов [i], как было посещено, чего я не хочу ... Я тоже пытался клонировать ... но бесполезно, и я не могу использовать близко, потому что он медленный – Vannian

Смежные вопросы