use*_*796 34 java collections pojo
我有一些Customer存储在ArrayList中的对象.我的Customer班级有2个数据成员:Name和Email.现在我想修改Emailfor Customer"Doe".
现在,如果"Doe"位于列表中的索引3,我知道我可以写下这一行:
myList.set( 3, new Customer( "Doe", "j.doe@supermail.com" ) );
Run Code Online (Sandbox Code Playgroud)
但这意味着要创建一个新对象.如果我有一个非常大的列表,我想这个过程会很慢.有没有其他方法直接访问存储在ArrayList中的Object的数据成员,可能使用另一种Collection而不是ArrayList?
固定.我错了:这只适用于元素重新分配.我以为返回的对象没有引用新的对象.
可以办到.
问:为什么?
答:get()方法返回引用原始对象的对象.
因此,如果您编写myArrayList.get(15).itsVariable = 7
或者
myArrayList.get(15).myMethod("My Value"),
您实际上是从返回的对象引用的对象中使用方法分配值(这意味着,更改将应用于原始对象)
你唯一不能做的就是myArrayList.get(15) = myNewElement.要做到这一点,你必须使用list.set()方法.
您可以遍历arraylist来标识索引以及最终需要修改的对象。您可以使用for-each进行以下操作:
for(Customer customer : myList) {
if(customer!=null && "Doe".equals(customer.getName())) {
customer.setEmail("abc@xyz.com");
break;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的customer是对Arraylist中存在的对象的引用,如果更改此客户引用的任何属性,这些更改将反映在存储在Arraylist中的对象中。