java - TreeSet 不添加超过两个项目(对象)

标签 java collections

我有一个实现 Comparable 接口(interface)的学生对象。

class Student implements Comparable<Student>{
    String rollNo;
    double internal;
    double external;
    Student(String rollNo, double internal, double external){
        this.rollNo = rollNo;
        this.internal = internal;
        this.external = external;
    }
    public int compareTo(Student otherStudent){
        return (this.external < otherStudent.external) ? -1 :
            (this.external > otherStudent.external) ? 0 : 1;
    }
}

我正在尝试从学生列表中添加一组对象。输入列表的片段如下:

U4CSE11150,25,24.5
U4CSE11167,4,13
U4CSE12502,23,34.5
U4CSE13001,27,44.5
U4CSE13002,26,30
U4CSE13003,44,62.5
U4CSE13005,32,30.5
U4CSE13006,24,31
U4CSE13007,27,41
U4CSE13008,34,47
...

我在 while 循环中创建 Student 对象,将其添加到 TreeSet students 并打印 Treeset 的大小以及第 3 个对象的值(即外部标记)。以下是代码。

 while((line = br.readLine()) != null){
                String[] elements = line.split(",");
                rollNo = elements[0];
                internal = Double.parseDouble(elements[1]);
                external = Double.parseDouble(elements[2]);

                Student s = new Student(rollNo, internal, external);
                students.add(s);
                System.out.println("Size: " + students.size() + " Mark: "
 + s.external);
                }

但是,当运行程序时,我得到如下输出。它仅添加前两个对象。

Size: 1 Mark: 24.5
Size: 2 Mark: 13.0
Size: 2 Mark: 34.5
Size: 2 Mark: 44.5
Size: 2 Mark: 30.0
Size: 2 Mark: 62.5
Size: 2 Mark: 30.5
Size: 2 Mark: 31.0
Size: 2 Mark: 41.0

有人能帮帮我吗?提前致谢。

最佳答案

您的 compareTo 方法无效 - 当比较值不相等时您返回 0。应该是:

public int compareTo(Student otherStudent){
    return (this.external < otherStudent.external) ? -1 :
        (this.external > otherStudent.external) ? 1 : 0;
}

关于java - TreeSet 不添加超过两个项目(对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37543848/

相关文章:

java - 在 glassfish 中更改企业应用程序( war )的上下文路径

java - sonar-scanner-maven 分支构建失败

java - 避免在计算器中切换? - java

java - Fast-fail - 异常仅在添加元素时发生,而不是在删除时发生

java - Ljava.lang.Object;不能转换为 [Ljavax.servlet.http.Cookie;

java - 与java的Set Collection相关的查询

Java - Google App Engine - UTF-8 编码问题

Java 8 - 使用 Comparator 以不同顺序比较多个字段

java - 为什么不更常用 Collections.checkedMap 和 friend ?

java - Set 中的 Get 和 Set 方法