Java 获取然后从列表中删除
Java Get and then remove from a list
在我的代码中,我有一个 class 的实例列表。我想获得 1 个实例的属性,即 ArrayList。在这个 class 中,我实现了 getter 和 setter。所以我打电话给
listofinstances.get(i).getArrayList().remove(0);
为了删除此列表的第一项。这有效吗??或者我必须首先获取列表,将其存储到一个临时变量,删除我想要的项目,最后用 set 方法刷新它??
例子
tmp = listofinstances.get(i).getArrayList();
tmp.remove(0);
listofinstances.get(i).setArrayList(tmp);
两个代码片段将产生相同的结果,因为 listofinstances.get(i).getArrayList().remove(0)
更新了 listofinstances.get(i).getArrayList()
返回的 List 实例,并且第二个代码片段做同样的事情,仅在两行中。
第二个片段中的 listofinstances.get(i).setArrayList(tmp);
行是多余的,因为 listofinstances
的第 i
元素已经包含对 tmp
引用的同一列表的引用。
删除
listOfInstances.get(1).getArrayList().remove(1);
足够有效。
为了演示这一点,我为您编写了一个测试代码。我刚刚删除了第二个对象的 ArrayList 的第二个 String 元素,您可以比较初始状态和更新后的状态;
import java.util.ArrayList;
import java.util.Arrays;
public class TestQuestion {
public static void main(String[] args) {
// inital objects to be stored
ArrayList<String> arr1 = new ArrayList<String>(
Arrays.asList((new String[] { "ins1: test string1",
"ins1: test string2", "ins1: test string3" })));
PlaceHolderObject<String> pho1 = new PlaceHolderObject<String>();
pho1.setArrayList(arr1);
ArrayList<String> arr2 = new ArrayList<String>(
Arrays.asList((new String[] { "ins2: test string1",
"ins2: test string2", "ins2: test string3" })));
PlaceHolderObject<String> pho2 = new PlaceHolderObject<String>();
pho2.setArrayList(arr2);
ArrayList<String> arr3 = new ArrayList<String>(
Arrays.asList((new String[] { "ins3: test string1",
"ins3: test string2", "ins3: test string3" })));
PlaceHolderObject<String> pho3 = new PlaceHolderObject<String>();
pho3.setArrayList(arr3);
// gather up all instance in one
ArrayList<PlaceHolderObject<String>> listOfInstances = new ArrayList<PlaceHolderObject<String>>();
// assignments
listOfInstances.add(pho1);
listOfInstances.add(pho2);
listOfInstances.add(pho3);
// print contents of listOfInstances objects
System.out.println("Contents of the 'listOfInstances' list");
System.out.println("**************************************");
for (int i = 0; i < listOfInstances.size(); i++)
System.out.println(listOfInstances.get(i).getArrayList());
System.out.println();
// print references of the contents of listOfInstances objects
System.out.println("References of the 'listOfInstances' list");
System.out.println("****************************************");
for (int i = 0; i < listOfInstances.size(); i++) {
System.out.println(i+1 + "th Object: " + listOfInstances.get(i) );
System.out.println(" ArrayList hashcode: " + listOfInstances.get(i).getArrayList().hashCode() );
}
// Remove second item of the second object
listOfInstances.get(1).getArrayList().remove(1);
System.out.println();
System.out.println();
// print contents of listOfInstances objects
System.out.println("Contents of the 'listOfInstances' updated list");
System.out.println("**********************************************");
for (int i = 0; i < listOfInstances.size(); i++)
System.out.println(listOfInstances.get(i).getArrayList());
System.out.println();
// print references of the contents of updated listOfInstances objects
System.out.println("References of the 'listOfInstances' updated list");
System.out.println("************************************************");
for (int i = 0; i < listOfInstances.size(); i++) {
System.out.println(i+1 + "th Object: " + listOfInstances.get(i) );
System.out.println(" ArrayList hashcode: " + listOfInstances.get(i).getArrayList().hashCode() );
}
}
// A POJO class that only stores an arrayList
public static class PlaceHolderObject<T> {
private ArrayList<T> arrayList;
// no-arg default constructor
public PlaceHolderObject() {
}
// parametric constructor
public PlaceHolderObject(ArrayList<T> arrayList) {
this.arrayList = arrayList;
}
public ArrayList<T> getArrayList() {
return arrayList;
}
public void setArrayList(ArrayList<T> arrayList) {
this.arrayList = arrayList;
}
}
}
输出结果如下;
Contents of the 'listOfInstances' list
**************************************
[ins1: test string1, ins1: test string2, ins1: test string3]
[ins2: test string1, ins2: test string2, ins2: test string3]
[ins3: test string1, ins3: test string2, ins3: test string3]
References of the 'listOfInstances' list
****************************************
1th Object: TestQuestion$PlaceHolderObject@5058431c
ArrayList hashcode: 1200611515
2th Object: TestQuestion$PlaceHolderObject@529e0c79
ArrayList hashcode: -744028452
3th Object: TestQuestion$PlaceHolderObject@645064f
ArrayList hashcode: 1606298877
Contents of the 'listOfInstances' updated list
**********************************************
[ins1: test string1, ins1: test string2, ins1: test string3]
[ins2: test string1, ins2: test string3]
[ins3: test string1, ins3: test string2, ins3: test string3]
References of the 'listOfInstances' updated list
************************************************
1th Object: TestQuestion$PlaceHolderObject@5058431c
ArrayList hashcode: 1200611515
2th Object: TestQuestion$PlaceHolderObject@529e0c79
ArrayList hashcode: 828096323
3th Object: TestQuestion$PlaceHolderObject@645064f
ArrayList hashcode: 1606298877
希望对您有所帮助。
在我的代码中,我有一个 class 的实例列表。我想获得 1 个实例的属性,即 ArrayList。在这个 class 中,我实现了 getter 和 setter。所以我打电话给
listofinstances.get(i).getArrayList().remove(0);
为了删除此列表的第一项。这有效吗??或者我必须首先获取列表,将其存储到一个临时变量,删除我想要的项目,最后用 set 方法刷新它??
例子
tmp = listofinstances.get(i).getArrayList();
tmp.remove(0);
listofinstances.get(i).setArrayList(tmp);
两个代码片段将产生相同的结果,因为 listofinstances.get(i).getArrayList().remove(0)
更新了 listofinstances.get(i).getArrayList()
返回的 List 实例,并且第二个代码片段做同样的事情,仅在两行中。
第二个片段中的 listofinstances.get(i).setArrayList(tmp);
行是多余的,因为 listofinstances
的第 i
元素已经包含对 tmp
引用的同一列表的引用。
删除
listOfInstances.get(1).getArrayList().remove(1);
足够有效。
为了演示这一点,我为您编写了一个测试代码。我刚刚删除了第二个对象的 ArrayList 的第二个 String 元素,您可以比较初始状态和更新后的状态;
import java.util.ArrayList;
import java.util.Arrays;
public class TestQuestion {
public static void main(String[] args) {
// inital objects to be stored
ArrayList<String> arr1 = new ArrayList<String>(
Arrays.asList((new String[] { "ins1: test string1",
"ins1: test string2", "ins1: test string3" })));
PlaceHolderObject<String> pho1 = new PlaceHolderObject<String>();
pho1.setArrayList(arr1);
ArrayList<String> arr2 = new ArrayList<String>(
Arrays.asList((new String[] { "ins2: test string1",
"ins2: test string2", "ins2: test string3" })));
PlaceHolderObject<String> pho2 = new PlaceHolderObject<String>();
pho2.setArrayList(arr2);
ArrayList<String> arr3 = new ArrayList<String>(
Arrays.asList((new String[] { "ins3: test string1",
"ins3: test string2", "ins3: test string3" })));
PlaceHolderObject<String> pho3 = new PlaceHolderObject<String>();
pho3.setArrayList(arr3);
// gather up all instance in one
ArrayList<PlaceHolderObject<String>> listOfInstances = new ArrayList<PlaceHolderObject<String>>();
// assignments
listOfInstances.add(pho1);
listOfInstances.add(pho2);
listOfInstances.add(pho3);
// print contents of listOfInstances objects
System.out.println("Contents of the 'listOfInstances' list");
System.out.println("**************************************");
for (int i = 0; i < listOfInstances.size(); i++)
System.out.println(listOfInstances.get(i).getArrayList());
System.out.println();
// print references of the contents of listOfInstances objects
System.out.println("References of the 'listOfInstances' list");
System.out.println("****************************************");
for (int i = 0; i < listOfInstances.size(); i++) {
System.out.println(i+1 + "th Object: " + listOfInstances.get(i) );
System.out.println(" ArrayList hashcode: " + listOfInstances.get(i).getArrayList().hashCode() );
}
// Remove second item of the second object
listOfInstances.get(1).getArrayList().remove(1);
System.out.println();
System.out.println();
// print contents of listOfInstances objects
System.out.println("Contents of the 'listOfInstances' updated list");
System.out.println("**********************************************");
for (int i = 0; i < listOfInstances.size(); i++)
System.out.println(listOfInstances.get(i).getArrayList());
System.out.println();
// print references of the contents of updated listOfInstances objects
System.out.println("References of the 'listOfInstances' updated list");
System.out.println("************************************************");
for (int i = 0; i < listOfInstances.size(); i++) {
System.out.println(i+1 + "th Object: " + listOfInstances.get(i) );
System.out.println(" ArrayList hashcode: " + listOfInstances.get(i).getArrayList().hashCode() );
}
}
// A POJO class that only stores an arrayList
public static class PlaceHolderObject<T> {
private ArrayList<T> arrayList;
// no-arg default constructor
public PlaceHolderObject() {
}
// parametric constructor
public PlaceHolderObject(ArrayList<T> arrayList) {
this.arrayList = arrayList;
}
public ArrayList<T> getArrayList() {
return arrayList;
}
public void setArrayList(ArrayList<T> arrayList) {
this.arrayList = arrayList;
}
}
}
输出结果如下;
Contents of the 'listOfInstances' list
**************************************
[ins1: test string1, ins1: test string2, ins1: test string3]
[ins2: test string1, ins2: test string2, ins2: test string3]
[ins3: test string1, ins3: test string2, ins3: test string3]
References of the 'listOfInstances' list
****************************************
1th Object: TestQuestion$PlaceHolderObject@5058431c
ArrayList hashcode: 1200611515
2th Object: TestQuestion$PlaceHolderObject@529e0c79
ArrayList hashcode: -744028452
3th Object: TestQuestion$PlaceHolderObject@645064f
ArrayList hashcode: 1606298877
Contents of the 'listOfInstances' updated list
**********************************************
[ins1: test string1, ins1: test string2, ins1: test string3]
[ins2: test string1, ins2: test string3]
[ins3: test string1, ins3: test string2, ins3: test string3]
References of the 'listOfInstances' updated list
************************************************
1th Object: TestQuestion$PlaceHolderObject@5058431c
ArrayList hashcode: 1200611515
2th Object: TestQuestion$PlaceHolderObject@529e0c79
ArrayList hashcode: 828096323
3th Object: TestQuestion$PlaceHolderObject@645064f
ArrayList hashcode: 1606298877
希望对您有所帮助。