0

我的配对班:

public class Pair<o,t> {

      private o one;
      private t two;

      public Pair(o one, t two) {
        this.one = one;
        this.two = two;
      }

      public o getO() { 
          return one;
      }

      public void setO(o one) {
          this.one = one;
      }

      public t getT() {
          return two;
      }

      public void setT(t two) {
          this.two= two;
      }
}

在我的主应用程序中,我用 pair 对象填充了一个列表:

List<Pair<Integer, String>> test = new ArrayList<Pair<Integer, String>>();
Pair<Integer, String> pair;

pair.setO(1);
pair.setT("A");
test.add(pair);

pair.setO(2);
pair.setT("B");
test.add(pair);

我希望能够仅通过列表索引获取整数值,例如。for循环写出A,B等。我该怎么做?有没有更简单的方法在 Java 中做这样的事情?

4

3 回答 3

1

for循环写出A,B等。我该怎么做?

使用For-Each 循环遍历集合。

for(Pair<Integer, String> pair : test ){
     System.out.println(pair.getT());
}
于 2014-07-17T20:42:18.687 回答
1

正如@Braj 建议的那样,您可以使用 for-each 循环。

for(Pair<Integer, String> p : test ){
    System.out.println(p.getT());
}

但是,由于您添加对象的方式,输出实际上是:

B
B

这是因为当您向 ArrayList 添加一个对象时,实际上是在添加对该对象的引用,因此当您修改它时,您也会修改存储在 ArrayList 中的那个。不会创建对象的单独副本!您需要构造一个新的 Pair 对象才能按您的意愿工作。

另一个注意事项:你还没有使用构造函数来初始化pair,所以 javac 会对你大喊大叫。

要解决这两个错误,请将您的代码更改为:

List<Pair<Integer, String>> test = new ArrayList<Pair<Integer, String>>();
test.add(new Pair<Integer, String>(1, "A"));
test.add(new Pair<Integer, String>(2, "B"));
for(Pair<Integer, String> p : test ){
    System.out.println(p.getT());
}
于 2014-07-17T20:58:40.537 回答
1

如果要按索引获取:

int i = ... ;
t theT = test.get(i).getT();
o theO = test.get(i).getO();

还有一点建议:始终将泛型类型大写,这样可以减少混淆,因为以小写字母开头的名称通常是对象而不是类/类型。

于 2014-07-17T21:00:20.063 回答