#java #arrays #object #arraylist
#java #массивы #объект #arraylist
Вопрос:
List<Cars> allValues = new ArrayList<Cars>();
Cars obj = new Cars();
obj.setKey("merc");
obj.setValue("true");
allValues.add(policyOrg1);
obj.setKey("audi");
obj.setValue("true");
allValues.add(obj);
У меня есть этот случай, когда мне нужно вставить два значения в мой список, и я использую один и тот же объект, а затем сбрасываю значение, как только ранее установленные ключ и значение были вставлены в список. Но, когда объект переназначается, я вижу, что значение, вставленное в список ранее, обновляется до последнего присвоенного значения. Любой способ решить эту проблему, кроме создания нового объекта и присвоения.
Результатом приведенной выше вставки является то, что в конечном итоге список содержит две записи с ключом audi и значением true, поскольку это последнее вставленное значение.
Комментарии:
1. Вы не помещаете копию объекта в список, вы помещаете ссылку на сам объект. Как бы вы это ни делали, вы будете помещать в список разные объекты.
2. «Любой способ решить эту проблему, кроме создания нового объекта и присвоения» … нет, и также не нужно бояться создания новых объектов.
3. » Любой способ решить эту проблему, кроме создания нового объекта и присвоения. » Нет, если вы хотите, чтобы в списке было 2 разных элемента, вам нужно создать 2 разных элемента вместо простого изменения 1 элемента.
4. Почему бы не использовать Set вместо списка для хранения ваших объектов Cars? (Дополнительная работа -> вы должны реализовать hashcode и equals в классе Cars для уникальности)
Ответ №1:
просто отредактируйте свой код следующим образом:
List<Cars> allValues = new ArrayList<Cars>();
Cars obj = new Cars();
obj.setKey("merc");
obj.setValue("true");
allValues.add(obj);
obj = new Cars(); // you need to create a new object here
obj.setKey("audi");
obj.setValue("true");
allValues.add(obj);
Что вы делаете, это добавляете объект в список, затем обновляете тот же объект вместо создания нового.
Ответ №2:
Я думаю, что лучший подход — изменить конструктор вашего класса Cars и передать значения для объекта через constructor. И затем вы можете просто создать новый объект в методе .add().
public Cars(String key,String value){
//make your stuff here
}
var allValues = new ArrayList<Cars>();//if you have Java 11 or higher use var
allValues.add(new Cars("merc","true"));
Это должно работать нормально 🙂