【发布时间】:2018-06-27 19:07:01
【问题描述】:
我有一个任务,我需要编写一个方法来混合两个通用列表并返回一个新的混合列表。
混合列表应该有 l1 的第一个元素在新混合列表的第一个位置,l2 的第一个元素应该在第二个位置,然后 l1 的第二个元素应该在第三个位置,依此类推。
如果一个列表比另一个长,则应按原始顺序添加其余列表。
一个例子是:l1 = (1,2,3) and l2=(9,8) --> 混合列表 = (1,9,2,8,3)
public <S, T> List<T> listeMischen(List<S> l1, List<T> l2) {
List<T> newlist = new ArrayList<T>();
for(int i = 0; i < l1.size(); i++)
{
for(int j = 0; j < l2.size(); j++) {
newlist.add(charAt(i));
newlist.add(charAt(j));
}
}
return newlist;
}
附:我不知道如何正确添加元素,因为它们是通用的。我输入了绝对错误的“charAt”方法,只是为了展示如果类型不是通用的而是字符,我会尝试做什么。 然而,由于这些元素可能是通用的,我非常不确定该怎么做。
【问题讨论】:
-
您的退货清单必须是 T 型吗?在那种情况下,这意味着 S 是 T 的子类。如果不是这种情况,我想最好的办法是返回一个 Object 列表(或者如果存在,则返回 S 和 T 的超类)
-
这两个列表是否总是具有相同的类型?
-
另外,请注意您的算法不会达到您想要的效果。您应该有一个从 0 到较小列表大小的第一个循环。然后你可以有两个循环从那个大小到每个列表的末尾,用剩余的元素完成你的结果列表(不知道我是否清楚:-P)
-
我建议您使用“zip”作为方法名称的一部分...合并的方式就像“拉上/拉下拉链”。
-
肯定是个好名字。但是我住在德国,我的讲师希望我使用这个名字:)
标签: java list generics arraylist