Как эффективно использовать глубокую копию?
Я пишу класс GenerateNeighbours
в котором начальное решение Sol
передается конструктору. Число "соседей" этого решения должно быть вычислено. Чтобы убедиться, что мое первоначальное решение не меняется, я делаю глубокую копию исходного решения каждую итерацию.
Кроме того, я использую arraylist S_Comp
который был создан с использованием generateSComp()
, В начале каждой итерации эта версия S_Comp
должен быть использован. Поэтому я не звоню generateSComp()
каждая итерация, поскольку я полагал, что это будет ненужным и потребует чрезмерного количества времени.
поскольку S_Comp
изменения в каждой итерации, и я хочу убедиться, что я начинаю с того же S_Comp
для каждой итерации я также использую для этого глубокую копию. Тем не менее, я чувствую, что мой подход не так эффективен, так как время выполнения моей программы едва улучшилось в отношении вызовов generateSComp
каждая итерация
Ниже вы можете найти код, о котором я говорю:
public GenerateNeighbours(DataFile testDataFile, ArrayList<Route> Sol, Random randomGen) throws IOException
{
solution = (ArrayList<Route>) DeepCopy.copy(Sol);
S_Comp = new ArrayList<MyNodesData>();
S_Comp = generateSComp(testDataFile, solution, S_Comp);
ArrayList<MyNodesData> originalS_Comp = (ArrayList<MyNodesData>) DeepCopy.copy(S_Comp);
rewards = new ArrayList<Integer>();
neighbours = new ArrayList<ArrayList<Route>>();
//---------Generating neighborhood solutions---------
for(int i=0; i<parameterSet.getBeta(); i++)
{
solution = (ArrayList<Route>) DeepCopy.copy(Sol); <---- making a deep copy every iteration
S_Comp = (ArrayList<MyNodesData>) DeepCopy.copy(originalS_Comp); <---- making a deep copy every iteration
// S_Comp = new ArrayList<MyNodesData>();
// generateSComp(testDataFile, solution, S_Comp); <------- This is what should be unnecessary since S_Comp is the same at the start of every iteration
step1to6(i);
rewards.add(getSolutionReward(solution));
neighbours.add(solution);
}
}
Поскольку я делаю две глубокие копии на каждой итерации, я чувствую, что моя программа довольно неэффективна. У кого-нибудь есть предложения о том, как более эффективно использовать мои глубокие копии? Или это так, как это должно быть сделано?
(Для DeepCopy
класс, который я использовал один из предложенных на http://javatechniques.com/blog/faster-deep-copies-of-java-objects/)