我有这个问题,我无法弄明白。我有这个练习:
完成以下通用Pair类,以便执行 程序给出指示的输出。不要改变主要。
class Pair ... { ... }
class GenericPairTest {
public static void main(String[] args) {
Pair<String,Integer> phoneNumber = new Pair<>("Bill's number", 1324);
System.out.println(phoneNumber);
Pair<Double,Double> point = new Pair<>(3.14, 2.32);
System.out.println(point);
}
}
输出就像那样:
比尔的号码1324
3.14 2.32`
我试过这样做:
import java.util.*;
class Pair <T,U> {
ArrayList<T,U> newList = new ArrayList<>();
Pair(T inT, U inU){
newList.add(inT,inU);
}
}
class GenericPairTest {
public static void main(String[] args) {
Pair<String,Integer> phoneNumber =
new Pair<>("Bill's number", 1324);
System.out.println(phoneNumber);
Pair<Double,Double> point =
new Pair<>(3.14, 2.32);
System.out.println(point);
}
}
但它不起作用:(
答案 0 :(得分:10)
为什么需要清单?您只需要存储两个对象:
class Pair <T,U> {
private T _t;
private U _u;
public Pair(T t, U u) {
_t = t;
_u = u;
public String toString() {
return _t + " " + _u;
}
}
答案 1 :(得分:5)
您的ArrayList
课程中不需要Pair
。
只需将这两个值保留为两个通用成员。
答案 2 :(得分:4)
你正在寻找这个我想:
ArrayList<Pair<T,U>>
但我认为你应该创建一个内部Pair
类,它看起来像这样:
public class Pair<T, U> {
private T left;
private U right;
// getters/setters + constructor for them
}
你也可以使用Map
和其他指出的人一样,但你不需要ArrayList
。
答案 3 :(得分:3)
您无法使用ArrayList执行此操作,但由于您的对总是只包含两个对象,因此它实际上不需要将它们存储在列表中。只需使用两个字段:
class Pair<T,U> {
final T t;
final U u;
Pair(T t, U u) {
this.t = t;
this.u = u;
}
@Override
public String toString() {
return t + " " + u;
}
}
你使用ArrayList的方式非常暗示Map。例如,您可以写:
Map<T,U> map = new HashMap<>();
Pair(T t, U u) {
map.put(t, u);
}
但是由于地图可以容纳任意数量的键值对,因此它不是用于存储单个对的正确结构。
答案 4 :(得分:1)
如果是您的情况,只需记住Pair
课程中的成对内容就足够了,并且没有内部ArrayList
。
之后,在外部,您可以在列表中包含Pair
。
final List<Pair<T,U>> pairList = new ArrayList<>();
另外,很抱歉这样说,但你在这里缺少一些非常基本的OOP技能。