黑马程序员技术交流社区

标题: TreeSet实现Comparable接口进行排序问题 [打印本页]

作者: 依旧    时间: 2013-8-18 22:03
标题: TreeSet实现Comparable接口进行排序问题
应该输出:lisi02.....17
                   lisi01.....20
                   lisi04.....20
                   lisi03.....21


但是只输出了:lisi02.....17

这是什么原因?

import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class TreeSetDemo2 {
/**
  *在TreeSet排序中一共有两种: 第一种就是集合自身具有比较性, 实现Comparable接口覆写compareTo方法
  *
  *第二种就是自定义比较器 当集合已经有排序功能,但是不符合项目的需求,
  * 那么这时就要自定义自己的比较器,实现Comparator接口,覆写compare方法,把自定义 比较器,传到TreeSet的构造器中
  */
public static void main(String[] args) {
  TreeSet ts = new TreeSet();
  ts.add(new Worker("lisi01",20));
  ts.add(new Worker("lisi02",17));
  ts.add(new Worker("lisi03",21));
  ts.add(new Worker("lisi04",20));
  Iterator it = ts.iterator();
  if (it.hasNext()) {
   Worker w = (Worker) it.next();
   System.out.println(w.getName() + ":" + w.getAge());
  }
}
}
class Worker implements Comparable {// 该接口强制让工人对象具备比较性
private String name;
private int age;
Worker(String name, int age) {
  this.name = name;
  this.age = age;
}
public String getName() {
  return name;
}
public int getAge() {
  return age;
}
@Override
public int compareTo(Object o) {
  if (!(o instanceof Worker)) // 对输入的对象进行判断是否是Work对象
   throw new RuntimeException("不是工人对象"); // 如果不是则抛出异常
  Worker w = (Worker) o;
  if (this.age > w.age)
   return 1;
  if (this.age == w.age)
   return this.name.compareTo(w.name);// 当主要条件满足时,比较次要条件,使用字符串的compareTo方法*/
  return -1;
}
}


作者: 吴光新    时间: 2013-8-19 00:39
哥们,你遍历集合了吗?
作者: 依旧    时间: 2013-8-19 01:09
遍历了啊!
Iterator it = ts.iterator();
  if (it.hasNext()) {
   Worker w = (Worker) it.next();
   System.out.println(w.getName() + ":" + w.getAge());
  }


作者: 依旧    时间: 2013-8-19 01:11
Jiewin 发表于 2013-8-19 00:39
哥们,你遍历集合了吗?

遍历了啊!
Iterator it = ts.iterator();
  if (it.hasNext()) {
   Worker w = (Worker) it.next();
   System.out.println(w.getName() + ":" + w.getAge());
  }


作者: 吴光新    时间: 2013-8-19 01:23
依旧 发表于 2013-8-19 01:11
遍历了啊!
Iterator it = ts.iterator();
  if (it.hasNext()) {

哥们,用循环才能取出全部数据,你这只是取出第一条


作者: 依旧    时间: 2013-8-19 01:45
Jiewin 发表于 2013-8-19 01:23
哥们,用循环才能取出全部数据,你这只是取出第一条

晕!半天没有看到,{:soso_e113:},tks!





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2