【发布时间】:2019-06-09 18:50:36
【问题描述】:
我有一个 Vertex 类,它有一个泛型类型 T 的字段元素。
我有一个 Vertex 对象的 ArrayList,我想对其进行排序,但我不确定如何排序。
我尝试使用如下所示的比较器:
listOfNeighbours.sort(new Comparator<Vertex<T>>() {
@Override
public int compare(Vertex<T> v1, Vertex<T> v2) {
if(v1.getElement() == v2.getElement()){
return 0;
}else if(v1.getElement() < v2.getElement()) {
return -1;
}else {
return 1;
}
}
});
显然,上面的解决方案是错误的,因为我们无法比较泛型,但我想要类似的东西来对我的 Vertex 对象列表进行排序。
在我的应用程序中,T 可以是整数、双精度或字符串。
感谢任何帮助!
谢谢。
编辑:我的顶点类如下:
public class Vertex<T>{
private ObjectProperty<T> element;
private BooleanProperty visited;
public Vertex() {
element = null;
visited = new SimpleBooleanProperty(false);
}
public Vertex(T element) {
this.element = new SimpleObjectProperty<T>(element);
this.visited = new SimpleBooleanProperty(false);
}
public Vertex(T element, boolean visited) {
this.element = new SimpleObjectProperty<T>(element);
this.visited = new SimpleBooleanProperty(visited);
}
public void setElement(T elem) {
this.element.set(elem);
}
public T getElement() {
return this.element.get();
}
public ObjectProperty<T> elementProperty(){
return this.element;
}
public void setVisited(boolean b) {
this.visited.set(b);
}
public boolean isVisited() {
return this.visited.get();
}
public BooleanProperty visitedProperty(){
return this.visited;
}
@Override
public boolean equals(Object o) {
if(o == this) {
return true;
}
if(!(o instanceof Vertex<?>)) {
return false;
}
Vertex<?> v= (Vertex<?>) o;
if(v.getElement() instanceof String) {
return v.getElement().equals(this.element.get());
}else {
return v.getElement() == this.element.get();
}
}
@Override
public String toString() {
return element.get().toString();
}
}
【问题讨论】:
-
v1.getElement() == v2.getElement()不是比较,它只是检查内存地址。你的代码应该只是return v1.getElement().compareTo(v2.getElement())。顶点元素必须实现Comparable。
标签: java sorting generics arraylist