A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 何艳梅 中级黑马   /  2014-8-27 15:07  /  1314 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.Iterator;
import java.util.TreeSet;
class Student3 implements Comparable{
private String name;
private int age;

Student3() { }

Student3(String name,int age) {
  this.name = name;
  this.age = age;
}

public String getName() {
  return name;
}
public int getAge() {
  return age;
}
public int compareTo(Object p) {
  int num = new Integer(((Student3)p).getAge()).compareTo(this.getAge());
  if (num==0)
   return ((Student3)p).getName().compareTo(this.getName());
//这里我返回的是1,不是num,我以为只是影响顺序,没想到竟然去重复失败。为什么呢?
  return 1;
  
}

}
public class Distinct3 {
public static void deleteSame() {
  TreeSet<Student3> set = new TreeSet<Student3>();
  
  set.add(new Student3("张三",18));
  set.add(new Student3("王五",20));
  set.add(new Student3("钱七",20));
  set.add(new Student3("孙八",14));
  set.add(new Student3("张三",18));
  
  Iterator<Student3> itSet = set.iterator();
  
  while(itSet.hasNext()) {
   System.out.println((itSet.next()).getName());
  }
}

public static void main(String[] args) {
  deleteSame();
}
}

7 个回复

倒序浏览
顶起来,帮我看看这样为什么会出错。
回复 使用道具 举报
一般集合, 都要覆写两个方法,
equals和hashCode方法.//是那么写么?  我忘记了.
因为set集合确定元素唯一性是根据hashCode和equals来判断的
先判断哈希值是否唯一, 不唯一,就不是一个,.  
你这个显然就是错在这了
回复 使用道具 举报
我表示有点费脑子,你能不能有点注释
回复 使用道具 举报
王凯路路 发表于 2014-8-27 21:39
一般集合, 都要覆写两个方法,
equals和hashCode方法.//是那么写么?  我忘记了.
因为set集合确定元素唯一性 ...

额,你说错了,只有hashset需要。我这里只要改动一个返回值就可以了。
回复 使用道具 举报
忆梦追风 发表于 2014-8-27 22:41
我表示有点费脑子,你能不能有点注释

这个。。。下次我会注意的。你只需要关注我唯一的注释就可以了,其他的没啥好看的,就是一些添加,输出。
回复 使用道具 举报
何艳梅 发表于 2014-8-27 22:54
额,你说错了,只有hashset需要。我这里只要改动一个返回值就可以了。

你改哪个返回值?  return 1 那个么 ?
回复 使用道具 举报
王凯路路 发表于 2014-8-28 10:46
你改哪个返回值?  return 1 那个么 ?

恩恩,我都注释了。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马