我有一个ArrayList,我想完全复制它.我假设有人花了一些时间使其正确,我尽可能使用实用程序类.很自然地,我最终得到了Collections一个包含复制方法的类.
假设我有以下内容:
List<String> a = new ArrayList<String>();
a.add("a");
a.add("b");
a.add("c");
List<String> b = new ArrayList<String>(a.size());
Collections.copy(b,a);
Run Code Online (Sandbox Code Playgroud)
这失败了,因为基本上它认为b不够大a.是的,我知道b它的大小为0,但它现在应该足够大,不应该吗?如果我必须先填补b,那么Collections.copy()在我的脑海中就会成为一个完全没用的功能.所以,除了编写一个复制函数(我现在要做的)之外,还有一种正确的方法吗?
假设我们有:
public class Test {
private List<String> mWorkList;
private List<String> mOriginalList;
public Test(List<String> list) {
mWorkList = list;
mOriginalList = list;
}
public void updateData(List<String> newList) {
mWorkList.clear();
mWorkList.addAll(newList);
}
}
Run Code Online (Sandbox Code Playgroud)
我只想要改变mWorkList,但mOriginalList在变过,当我打电话updateData(List<String>)。那么我应该如何做才能保持mOriginalList在构造函数中最初分配的状态?
如何在Java中编写一个静态方法,它将获取List,对每个元素执行操作并返回结果(当然不会影响原始文件)?
例如,如果我想在每个元素中添加2,那么... 具体的返回类型必须相同,例如,如果我的List是一个值为1,2,3的LinkedList,我应该返回一个值为3,4,5的LinkedList.类似地,对于ArrayList,Vector,Stack等,它们都是列表.
我可以看到如何使用多个if (lst instanceof LinkedList) ...等...更好的方法吗?
import java.util.List;
public class ListAdd {
static List<Integer> add2 (List<Integer> lst) {
...
return result;
}
}
Run Code Online (Sandbox Code Playgroud) 我在编译时遇到未经检查的表达式错误,发现有问题的行是
ArrayList<Integer> items = (ArrayList<Integer>) this.items.clone();
Run Code Online (Sandbox Code Playgroud)
我正在尝试执行对象的深层复制,因此我以上述方式克隆对象和数组列表的属性。我该如何解决这个警告?
@SuppressWarnings("unchecked"),但这只是隐藏了问题(尽管我期望没有)这样做的正确方法是什么?