我有一个 arraylist ,其中记录存储为对象。我想知道是否有办法更新数组列表中的记录而不删除现有记录?
例如,我的记录具有名字、姓氏、缩写、ID 等属性。有没有办法更新记录中的名字,而不必同时提供所有其他属性值?
目前我所做的是,当用户给出一个 id 时,我会查找该 id 是否与数组中的任何记录匹配,如果匹配,我将其从数组中删除并让用户从头开始输入所有详细信息。
最佳答案
Arraylist 存储引用并且不复制/创建新对象。如果更改存储的对象引用,它也会反射(reflect)在 arrayList 中。下面是一个示例代码来演示:
package arraylistExample;
import java.util.ArrayList;
/**
* Class represeting entity to be stored in Arraylist
*
*/
class Person {
private String name;
private int age;
private String address;
public Person(String name, int age, String address) {
super();
this.name = name;
this.age = age;
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", address=" + address
+ "]";
}
}
.
/**
* Public class to run the demo
*
*/
public class ArraylistObjectModify {
public static void main(String args[]) {
// Add an arraylist and add elements to it
ArrayList<Person> personList = new ArrayList<Person>();
personList.add(new Person("Juned",32,"Bangalore"));
personList.add(new Person("Ahsan",31,"Delhi"));
personList.add(new Person("Sniper",1,"Grave"));
//Print list elements before change
System.out.println("Arraylist pre objects modification");
System.out.println("----------------------------------");
for(Person person:personList) {
System.out.println(person);
}
for(Person person:personList) {
if(person.getName().equals("Juned")) {
person.setName("ChangedJuned");
person.setAddress("Hola-lulu");
}
}
//Print list elements after change
System.out.println("Arraylist post objects modification");
System.out.println("----------------------------------");
for(Person person:personList) {
System.out.println(person);
}
}
}
关于java - 有没有一种方法可以更新 Arraylist 中的记录而不删除现有记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16337550/