将元素放入TreeMap Java

问题描述

我正在尝试使用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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...