以下是我尝试过的代码:
//Initialized the first list with initial capacity 2
List<String> list1=new ArrayList<String>(2);
list1.add("banana");
list1.add("apple");
//Initialized the second list with initial capacity 4
List<String> list2=new ArrayList<String>(4);
//Performing copying
Collections.copy(list2, list1);
但是使用IndexOutOfBoundsOperation复制操作失败 原因: - 源不适合dest。
质疑为什么复制操作正在处理大小,即没有元素 一个列表?为什么它不对容量进行操作?
答案 0 :(得分:4)
将一个列表中的所有元素复制到另一个列表中。在操作之后,目标列表中每个复制元素的索引将与源列表中的索引相同。目标列表必须至少与源列表一样长。如果它更长,则目标列表中的其余元素不受影响。 此方法以线性时间运行。
IndexOutOfBoundsException - 如果目标列表太小而无法包含整个源列表。 UnsupportedOperationException - 如果目标列表的list-iterator不支持set操作。
那么......它只是想要的行为。如果您想将一个列表的所有元素添加到另一个列表,可以List#addAll
。
答案 1 :(得分:0)
public static <T> void copy(List<? super T> dest, List<? extends T> src)
此方法适用于任何两个List
实现。
如果您使用以下内容运行该怎么办?
List<String> l1 = Arrays.asList("a","b","c");
List<String> l2 = Arrays.asList("1","2");
Collections.copy(l1,l2);
Collections.copy
无法使用add
来增加l2
的尺寸,因为Arrays.asList
会返回固定尺寸List
并且不会add
t支持l2
。因此,l1
的大小必须足够大,以适合Collections.copy
的所有元素。
因此,查看实施情况,您会发现set
使用add
而不是export class UserComponent implements OnInit {
score : number;
constructor(private route: ActivatedRoute, private userService: UserService) {}
ngOnInit() {
this.sub = this.route.params.subscribe(params => {
this.userId = params['id'];
this.userService.getUser(this.charId)
.subscribe(
(user: User) => {
this.user = user
this.user.score = calcScore(this.user.height, this.user.weight)
});
});
}
}
。