我有班级对:
public class Pair<T1, T2> {
T1 info1;
T2 info2;
Pair<T1,T2> next;
Pair<T1,T2> prev;
Pair(T1 info1,T2 info2,Pair<T1,T2> next, Pair<T1,T2> prev) {
this.info1 = info1;
this.info2 = info2;
this.next = next;
this.prev = prev;
}
@Override
public String toString() {
return info1.toString() + info2.toString();
}
}
我必须实现一个类Zipper
,它有两个静态方法:zip和unzip。
zip将两个列表“压缩”为一个,并从两个中解压缩。
例如,当我有两个列表时:
list1: 1 , 2 ,3 ,4
list2: a, b, c, d
zip必须返回:1a, 2b, 3c, 4d
并且解压缩必须反转。
我不知道怎么做,有人可以帮助我吗?
答案 0 :(得分:4)
拉链:
public class Zipper {
static <T1, T2> List<Pair<T1, T2>> zip(List<T1> input1, List<T2> input2){
int inputSize = input1.size();
if(inputSize != input2.size()){
throw new IllegalArgumentException("Different input sizes.");
}
List<Pair<T1,T2>> output = new LinkedList<Pair<T1,T2>>();
for (int i = 0; i < inputSize; ++i){
output.add(new Pair<T1,T2>(input1.get(i), input2.get(i)));
}
return output;
}
static <T1,T2> Pair<List<T1>, List<T2>> unzip(List<Pair<T1, T2>> input){
List<T1> output1 = new LinkedList<T1>();
List<T2> output2 = new LinkedList<T2>();
for(Pair<T1, T2> pair : input){
output1.add(pair.getInfo1());
output2.add(pair.getInfo2());
}
return new Pair<List<T1>, List<T2>>(output1, output2);
}
public static void main(String[] args) {
List<Integer> input1 = Arrays.asList(1,2,3,4);
List<Character> input2 = Arrays.asList('a','b','c','d');
List<Pair<Integer, Character>> zipped = zip(input1, input2);
System.out.println("zipped: " + zipped);
Pair<List<Integer>,List<Character>> output = unzip(zipped);
System.out.println("unzipped1: " + output.getInfo1());
System.out.println("unzipped2: " + output.getInfo2());
}
}
对:
public class Pair<T1, T2> {
T1 info1;
T2 info2;
public Pair(T1 info1, T2 info2) {
this.info1 = info1;
this.info2 = info2;
}
public T1 getInfo1() {
return info1;
}
public T2 getInfo2() {
return info2;
}
@Override
public String toString() {
return info1.toString() + info2.toString();
}
}
答案 1 :(得分:0)
你的问题有点不清楚,但我认为你的例子会更有用(其中[]表示列表,而Pair表示由“new Pair(x,y)”构成的对象):
Input:
list1: [1, 2, 3, 4]
list2: [a, b, c, d]
Output:
zip: [Pair<1, a>, Pair<2, b>, Pair<3, c>, Pair<4, d>]
也就是说,你最终会得到一对配对列表。
我不清楚(正如delnan指出的那样)是否必须创建链接列表。你被要求写的zip和unzip的签名是什么?