import java.util.TreeSet;
class Stu implements Comparable{
String id;
String name;
int score;
public Stu(String id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
public String toString() {
return id + ":" + name + ":" + score;
}
public int compareTo(Object o) {
Stu st = (Stu)o;
if(id.equals(st.id))
return 0;
if(name.equals(st.name))
return id.compareTo(st.id);
return name.compareTo(st.name);
}
}
public class Example12 {
public static void main(String[] args) {
TreeSet<Stu> ts = new TreeSet<>();
ts.add(new Stu("001","Mike",100));
ts.add(new Stu("002","Jack",400));
ts.add(new Stu("002","Tom",300));
ts.add(new Stu("004","Rose",400));
System.out.println(ts);
}
}
运行结果如下:
相同学号2没有被去掉,为什么?感觉程序没有什么问题啊
不相同啊,为什么会相同呢,只是学号相同,对象又不是同一个对象。
new关键字会给对象分配不同的内存地址,即时内容相同,但内存地址不同,他们也不是相同的对象。所以该set集合不会去掉。
import java.util.TreeSet;
class Stu implements Comparable{
String id;
String name;
int score;
public Stu(String id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
public String toString() {
return id + ":" + name + ":" + score;
}
public int compareTo(Object o) {
Stu st = (Stu)o;
return id.compareTo(st.id);
}
}
public class Example12 {
public static void main(String[] args) {
TreeSet<Stu> ts = new TreeSet<>();
ts.add(new Stu("1","Mike",100));
ts.add(new Stu("2","Jack",400));
ts.add(new Stu("2","Tom",300));
ts.add(new Stu("4","Rose",400));
System.out.println(ts);
}
}
这个可以去掉啊
import java.util.TreeSet;
//定义Teacher类实现Comparable接口
class Teacher implements Comparable {
String name;
int age;
public Teacher(String name, int age) {
this.name = name;
this.age = age;
}
public String toString() {
return name + ":" + age;
}
//重写Comparable接口的compareTo()方法
public int compareTo(Object obj){
Teacher s = (Teacher) obj;
// 定义比较方式,先比较年龄age,再比较名称name
if(this.age -s.age > 0) {
return 1;
}
if(this.age -s.age == 0) {
return this.name.compareTo(s.name);
}
return -1;
}
}
public class Example12 {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new Teacher("Jack",19));
ts.add(new Teacher("Rose",18));
ts.add(new Teacher("Tom", 19));
ts.add(new Teacher("Rose",18));
System.out.println(ts);
}
}
这段代码也可以去重
Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
将此对象与指定对象进行比较以确定顺序。返回一个负整数、零或正整数,因为该对象小于、等于或大于指定的对象。
你看看Comparable里面的方法的注释
按你的意思, 你应该重写equals,下面的代码经过我的测试没问题
package com.xm.officialaccounts.entity;
import java.util.TreeSet;
class Stu implements Comparable{
String id;
String name;
int score;
public Stu(String id, String name, int score) {
this.id = id;
this.name = name;
this.score = score;
}
@Override
public String toString() {
return id + ":" + name + ":" + score;
}
@Override
public boolean equals(Object obj){
Stu st = (Stu)obj;
return id.equals(st.id);
}
@Override
public int compareTo(Object o) {
// 这个是用来排序的
// a negative integer, zero, or a positive integer
// as this object is less than, equal to, or greater than the specified object.
Stu st = (Stu)o;
return id.compareTo(st.id);
}
public static void main(String[] args) {
TreeSet<Stu> ts = new TreeSet<>();
ts.add(new Stu("001", "Mike", 100));
ts.add(new Stu("002", "Jack", 400));
ts.add(new Stu("002", "Tom", 300));
ts.add(new Stu("004", "Rose", 400));
System.out.println(ts);
}
}
[001:Mike:100, 002:Jack:400, 004:Rose:400]
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632