问题描述
我正在尝试使用TreeMap存储数据,但是在向其中添加新元素时遇到问题。
settings.xml
当我使用addVertex方法时,没有错误,但是在显示地图时,树形地图中只有1个元素:{1 = []}
public class Graph {
private TreeMap<Vertex,ArrayList<Vertex>> tree;
public Graph() {
this.tree = new TreeMap<>();
}
public void addVertex(int label) {
this.tree.put(new Vertex(label),new ArrayList<Vertex>());
}
我试图创建一个像这样的基本地图:
public class Main {
public static void main(String[] args) {
Graph g = new Graph();
g.addVertex(1);
g.addVertex(2);
g.addVertex(3);
g.addVertex(4);
它有效,所以我真的不明白我的错误。 我还检查了我的类Vertex是否正确,并且运行良好。
TreeMap<Integer,String> map = new TreeMap<Integer,String>();
map.put(1,"dog");
map.put(2,"cat");
System.out.println(map);
}
我编辑了我的Vertex类,并添加了public class Vertex implements Comparable<Vertex> {
private int label;
public Vertex(int label) {
this.label = label;
}
public String toString() {
return this.label + "";
}
public int compareto(Vertex o) {
return this.label == o.label ? 1 : 0;
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if( ! (obj instanceof Vertex) ) return false;
Vertex other = (Vertex) obj;
return this.label == other.label;
}
@Override
public int hashCode() {
return label < 0 ? 0 : label;
}
和hashcode()
,但仍然无法正常工作。
您能帮我发现我的错误吗? 预先感谢!
解决方法
您的Function Calculate(Optional ByVal operator1 As Int = 20,Optional ByVal operator2 As Int = 30)
' logic goes here
End Function
方法错误。看看its specification:
实施者必须确保所有x和y的sgn(x.compareTo(y))== -sgn(y.compareTo(x))。
由于您只返回了值1和0,因此该条件不成立。
通常,可比对象必须始终支持所有三种情况:
- 这小于参数:返回一个负整数(通常为
compareTo
) - 与参数的排序方式相同:返回0
- 此参数大于参数:返回一个正整数(通常为
-1
)
如果您的代码中没有这三种情况,那是不正确的。
由于您基本上想根据1
进行排序,所以最简单的实现是将委托给label
:
Integer.compare