[英]Java Recursive Method ArrayList is not adding all child elements to the final ArrayList
[英]Adding element to an ArrayList received as argument in recursive method?
我有一個方法來執行ArrayList
元素的置換,我給ArrayList作為參數來存儲置換的位置。 但是,它總是添加相同的項目。
我認為關於此的問題是ArrayList 參考 。
public class TSP {
static ArrayList permute(ArrayList<Integer> arr, int k, ArrayList<ArrayList<Integer>> resultados) {
for(int i = k; i < arr.size(); i++){
java.util.Collections.swap(arr, i, k);
permute(arr, k+1, resultados);
java.util.Collections.swap(arr, k, i);
}
if (k == arr.size() -1){
System.out.println("Permute method: "+arr.toString());
resultados.add(arr);
}
return resultados;
}
public static void main (String[] args) {
ArrayList<Integer> ciudades = new ArrayList<>();
ciudades.add(1);
ciudades.add(2);
ciudades.add(3);
ArrayList<ArrayList<Integer>> resultados = new ArrayList();
resultados = permute(ciudades, 0, resultados);
for (ArrayList<Integer> resultado : resultados) {
System.out.println(resultado.toString());
}
}
}
執行的輸出為:
置換方法:[1、2、3]
置換方法:[1、3、2]
置換方法:[2,1,3]
置換方法:[2、3、1]
置換方法:[3,2,1]
置換方法:[3,1,2]
[1,2,3]
[1,2,3]
[1,2,3]
[1,2,3]
[1,2,3]
[1,2,3]
因此,算法內部一切正常,但僅添加了第一個排列。 為什么?
您是對的,它是ArrayList引用。 它總是指向內存中的同一對象,因此置換總是影響resultado中的所有數組。 (因為它們都是相同的參考)。
將添加行更改為:
resultados.add((ArrayList<Integer>)arr.clone());
而是將置換數組的副本添加到resultados,並為您提供期望的輸出。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.