Java元组/对

时间:2014-07-17 20:39:52

标签: java arraylist tuples keyvaluepair

我的配对课程:

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;
      }
}

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

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-loop写出A,B等。我该怎么做?有没有更简单的方法在Java中做这样的事情?

3 个答案:

答案 0 :(得分:1)

  

for-loop写出A,B等。我该怎么做?

使用The For-Each Loop对集合进行迭代。

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

答案 1 :(得分: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());
}

答案 2 :(得分:1)

如果你想通过索引获取:

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

还有一些建议:总是大写你的泛型类型,减少混淆,因为以小写字母开头的名称通常是对象而不是类/类型。