2013-11-18 3 views
0

У меня есть код:ArrayList. Странные вещи

private class Record { 
    byte year; 
    float val; 
} 
Record record=new Record(); 
List<Record> recList = new ArrayList<Record>(); 
... 
//now I add first element to array list 
record.year=12; 
record.val=55; 
recList.add(record); 

//now I add second element to array list 
record.year=13; 
record.val=77; 
recList.add(record); 

Как вы видите, я добавляю различные элементы. Но в результате все элементы в списке массивов одинаковы. Таким образом, добавление 2-го, 3-го ... элемента меняет все предыдущие элементы на значения последней «записи». Что случилось? Благодаря?

+1

Вам нужно создать 'новый' экземпляр' Record' для каждого элемента, который вы хотите добавить в список. –

ответ

1

Вам нужно создать экземпляр новых объектов, чтобы они физически разные объекты. Прямо сейчас, у вас есть только один объект, который находится в ArrayList несколько раз.

Record record = new Record(); 

Кроме того, вы должны добавить hashCode() и equals() в Record, так как вы работаете с коллекциями.

3

ArrayList ведет список ссылки на объекты. Вы всегда изменяете один и тот же исходный объект, что означает, что ссылка такая же, но ее значения различаются.

Вы можете это исправить, явно назначая новый экземпляр переменной record:

record.year=12; 
record.val=55; 
recList.add(record); 


record = new Record(); 
record.year=13; 
record.val=77; 
recList.add(record); 
1

Как вы видите, я добавлять различные элементы

Нет, вы только что отредактировали старый Record объект и добавить его снова. Каждый раз перед тем, как вы добавите объект Record, вам необходимо вставить new.

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