Java:访问Vector <pair <string,int =“”>&gt;的int值在索引i </pair <string,>

时间:2015-03-08 08:50:55

标签: java vector

我创建了一个名为Pair

的通用集合类
public class Pair<L,R> {
private L l;
private R r;

public Pair(L l, R r){
    this.l = l;
    this.r = r;
}
public L getL(){
    return l;
}
public R getR(){
    return r;
}
public void setL(L l){
    this.l = l;
}
public void setR(R r){
    this.r = r;
}
}

然后我想创建一个名为

的记录的Vector
Pair<String, int>

这样我以后可以迭代向量并比较向量的不同索引处的int值。 我是通过以下代码完成的:

private Vector<Pair<String, Long>> records = new Vector();

然后想要比较排序函数中不同索引的int值

public void sort(){
    int n = records.size();
    int p = 0;
    int i, j;

    for(p = 0; p < n-1; p++){
        j = p;
        for(i = p+1; i<n; i++){
            if(records.get(i) < records.get(j))
                j = i;
        }   
    }
}

我在If语句中遇到错误,说操作符未定义参数类型。如果有人知道如何解决这个问题,请告诉我。 提前致谢

1 个答案:

答案 0 :(得分:0)

虽然Java中没有重载运算符,但您无法使用>比较对象。您应该实现Comparable接口并使用其compareTo()方法:

public class Pair<L, R> implements Comparable<Pair<L, R>> {
    private L l;
    private R r;

    // ... remaining part ...

    @Override
    public int compareTo(Pair p) {
         // e.g. comparison by length of `toString` representation
         return (toString().length() - p.toString().length());
    }

}

现在,使用Pair#compareTo比较您的对象:

for(p = 0; p < n-1; p++){
    j = p;
    for(i = p+1; i<n; i++) {
        // compare your object by natural order
        if(records.get(i).compareTo(records.get(j)) < 0)
            j = i;
    }   
}

要将Pair个对象与某个有意义的值进行比较,您应该实现更复杂的compareTo()方法逻辑 - 因为在设计时你无法知道哪些类型是L和{{1对于编译器,它们是没有特定类型的对象。

要解决此问题,您可以明确定义这些类型:

R

并使用class Pair<L extends Comparable<L>, R extends Comparable<R>> implements Comparable<Pair<L, R>> { //... } 或/和Pair#compareTo()方法实施L#compareTo()

R#compareTo()String都会实现Long,因此可以将它们用作此类的类型。

另一种方法是将Comparable类保存为非通用类型的int(long)值作为属性,例如Pair和构造函数Pair<T>