ArrayList有多个Generic类型?

时间:2013-12-18 11:35:36

标签: java generics arraylist

我有这个问题,我无法弄明白。我有这个练习:

  

完成以下通用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);
    }
}

但它不起作用:(

5 个答案:

答案 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技能。