我创建了一个名为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;
}
}
然后我想创建一个名为
的记录的VectorPair<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语句中遇到错误,说操作符未定义参数类型。如果有人知道如何解决这个问题,请告诉我。 提前致谢
答案 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>
。