我的配对课程:
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中做这样的事情?
答案 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();
还有一些建议:总是大写你的泛型类型,减少混淆,因为以小写字母开头的名称通常是对象而不是类/类型。