Как использовать addall в списке java - PullRequest
0 голосов
/ 23 января 2012

Здравствуйте, я должен добавить элементы в свой список, и я замечаю, что если я использую метод add, я просто добавляю ссылку в свой список, но я хотел бы добавить элементы, а не ссылку:

ArrayList ArrayListIdle = new ArrayList();
List<State> arrayState = new ArrayList<State>();

while(rs.next){

state = new State();

state.updateStateArray(arrayState);//This function mods the elements of (arrayState);//This 
state.setArrayStates(arrayState);//add a list of arrayState to the object state


//I have a array and I want to add the element state with his arraylist(not the reference to)

ArrayListIdle.addAll(state);

// I tried with add , but in the next iteration the arrayState change.

}

Ответы [ 2 ]

1 голос
/ 23 января 2012

Вы добавляете один и тот же объект ArrayState каждый раз.Вы должны создавать новый ArrayState объект каждый раз в цикле while, чтобы избежать его изменения каждый раз.Это потому, что по умолчанию объекты всегда передаются по ссылке в Java.Попробуйте сделать это:

ArrayList arrayListIdle = new ArrayList();


while(rs.next){

    state = new State();
    List<State> arrayState = new ArrayList<State>();

    state.updateStateArray(arrayState);//This function mods the elements of (arrayState);//This 
    state.setArrayStates(arrayState);//add a list of arrayState to the object state
    arrayListIdle.addAll(state);

}
1 голос
/ 23 января 2012

Проблема здесь в том, что у вас есть один объект "arrayState", и все объекты состояния ссылаются на один и тот же.

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

 while(rs.next) {
      List<State> arrayState = new ArrayList<State>();
      ...
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...