使用或不使用 'new' - JAVA 将列表复制到另一个列表之间的区别
Difference between copying a list to another with or without 'new' - JAVA
1)
有什么区别
for (MyObject myObject : sessionBean.firstList()) {
secondList.add(new MyObject(myObject.getSeverity(), myObject.getSummary(), myObject.getDetail()));
}
和
for (MyObject myObject : sessionBean.firstList()) {
secondList.add(facesMessage);
}
考虑到我稍后想清除 sessionBean.firstList 但想保留 secondList 中的值。
2) 在 java 8 中是否有更易读的方法?
您可以以可读的方式在单个语句中完成:
secondList.addAll(sessionBean.firstList())
当您使用 new 时,您将分配额外的内存,否则您将映射现有对象的引用。即使你想清除 sessionBean.firstList 稍后的时间点,如果你在另一个集合中有对该对象的有效引用,它也不会被垃圾收集器收集。所以我看不到任何强制使用新运算符的有效场景。
1) 不同之处在于,在第一种情况下,secondList
将包含对具有与 firstList
相同字段的新对象的引用。在第二种情况下,secondList
将包含对 与 firstList
中相同的 对象的引用。因此,如果您修改了 firstList
项中的一项,则 secondList
中的相应项也将被修改。
2) 您可以使用以下示例创建包含副本的列表:
List<MyObject> secondList = sessionBean.firstList()
.stream()
.map(first -> new MyObject(first.getSeverity(), first.getSummary(), first.getDetail()))
.collect(Collectors.toList());
或者,如果您在 MyObject
class
中实现 clone
方法
public MyObject clone() {
return new MyObject(severity, summary, detail);
}
你可以简单地写:
List<MyObject> secondList = sessionBean.firstList()
.stream()
.map(MyObject::clone)
.collect(Collectors.toList());
或者如果您只想复制引用,请使用
secondList.addAll(sessionBean.firstList())
1)
有什么区别for (MyObject myObject : sessionBean.firstList()) {
secondList.add(new MyObject(myObject.getSeverity(), myObject.getSummary(), myObject.getDetail()));
}
和
for (MyObject myObject : sessionBean.firstList()) {
secondList.add(facesMessage);
}
考虑到我稍后想清除 sessionBean.firstList 但想保留 secondList 中的值。
2) 在 java 8 中是否有更易读的方法?
您可以以可读的方式在单个语句中完成:
secondList.addAll(sessionBean.firstList())
当您使用 new 时,您将分配额外的内存,否则您将映射现有对象的引用。即使你想清除 sessionBean.firstList 稍后的时间点,如果你在另一个集合中有对该对象的有效引用,它也不会被垃圾收集器收集。所以我看不到任何强制使用新运算符的有效场景。
1) 不同之处在于,在第一种情况下,secondList
将包含对具有与 firstList
相同字段的新对象的引用。在第二种情况下,secondList
将包含对 与 firstList
中相同的 对象的引用。因此,如果您修改了 firstList
项中的一项,则 secondList
中的相应项也将被修改。
2) 您可以使用以下示例创建包含副本的列表:
List<MyObject> secondList = sessionBean.firstList()
.stream()
.map(first -> new MyObject(first.getSeverity(), first.getSummary(), first.getDetail()))
.collect(Collectors.toList());
或者,如果您在 MyObject
class
clone
方法
public MyObject clone() {
return new MyObject(severity, summary, detail);
}
你可以简单地写:
List<MyObject> secondList = sessionBean.firstList()
.stream()
.map(MyObject::clone)
.collect(Collectors.toList());
或者如果您只想复制引用,请使用
secondList.addAll(sessionBean.firstList())