这是我学习java集合中遇到的一个例子:仿照原题在eclipse中敲出代码,但最后运行出现问题了,代码如下:
- Java code
package days03;import java.util.*;public class TreeSetDemo02 implements Comparable { String name; long id; public TreeSetDemo02(String name, long id){ this.id = id; this.name = name; } public int compareTo(Object o) { TreeSetDemo02 tsd = (TreeSetDemo02) o; int result = id > tsd.id ? 1 : (id == tsd.id ? 0 : 1); return result; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getId() { return id; } public void setId(long id) { this.id = id; } public static void main(String[] args){ TreeSetDemo02 tsd1 = new TreeSetDemo02("李同学", 01011); TreeSetDemo02 tsd2 = new TreeSetDemo02("陈同学", 01021); TreeSetDemo02 tsd3 = new TreeSetDemo02("王同学", 01051); TreeSetDemo02 tsd4 = new TreeSetDemo02("马同学", 01012); TreeSet tree = new TreeSet(); tree.add(tsd1); tree.add(tsd2); tree.add(tsd3); tree.add(tsd4); Iterator it = tree.iterator(); System.out.println("集合的所有元素:"); while(it.hasNext()){ TreeSetDemo02 tsd0 = (TreeSetDemo02) it.next(); System.out.println(tsd0.getId() + " " + tsd0.getName()); } it = tree.headSet(tsd2).iterator(); System.out.println("截取前面tsd2前面的部分集合:"); while(it.hasNext()){ TreeSetDemo02 tsd0 = (TreeSetDemo02) it.next(); System.out.println(tsd0.getId() + " " + tsd0.getName()); } it = tree.subSet(tsd2, tsd3).iterator(); System.out.println("截取从tsd2到tsd3之前的部分集合:"); while(it.hasNext()){ TreeSetDemo02 tsd0 = (TreeSetDemo02) it.next(); System.out.println(tsd0.getId() + " " + tsd0.getName()); } } }
------解决方案--------------------
有个小bug,lz按照我的方式改一下
public int compareTo(Object o) {
TreeSetDemo02 tsd = (TreeSetDemo02) o;
int result = id > tsd.id ? 1 : (id == tsd.id ? 0 : -1);
return result;
}
------解决方案--------------------
建议楼主认真看看 java.util.Comparable这个接口,对应的接口方法 compareTo(Object)比较的时候分别返回 正数 0 负数 的意义
- Java code
import java.util.*;public class TreeSetDemo02 implements Comparable { String name; long id; public TreeSetDemo02(String name, long id){ this.id = id; this.name = name; } @Override public int compareTo(Object o) { TreeSetDemo02 tsd = (TreeSetDemo02) o; if(id>tsd.id){ return 1; }else if(id==tsd.id){ return 0; }else{ return -1; }// int result = id > tsd.id ? 1 : (id == tsd.id ? 0 : -1);// return result; } public String getName() { return name; } public void setName(String name) { this.name = name; } public long getId() { return id; } public void setId(long id) { this.id = id; } public static void main(String[] args){ TreeSetDemo02 tsd1 = new TreeSetDemo02("李同学", 01011); TreeSetDemo02 tsd2 = new TreeSetDemo02("陈同学", 01021); TreeSetDemo02 tsd3 = new TreeSetDemo02("王同学", 01051); TreeSetDemo02 tsd4 = new TreeSetDemo02("马同学", 01012); TreeSet tree = new TreeSet(); tree.add(tsd1); tree.add(tsd2); tree.add(tsd3); tree.add(tsd4); Iterator it = tree.iterator(); System.out.println("集合的所有元素:"); while(it.hasNext()){ TreeSetDemo02 tsd0 = (TreeSetDemo02) it.next(); System.out.println(tsd0.getId() + " " + tsd0.getName()); } it = tree.headSet(tsd2).iterator(); System.out.println("截取前面tsd2前面的部分集合:"); while(it.hasNext()){ TreeSetDemo02 tsd0 = (TreeSetDemo02) it.next(); System.out.println(tsd0.getId() + " " + tsd0.getName()); } it = tree.subSet(tsd2, tsd3).iterator(); System.out.println("截取从tsd2到tsd3之前的部分集合:"); while(it.hasNext()){ TreeSetDemo02 tsd0 = (TreeSetDemo02) it.next(); System.out.println(tsd0.getId() + " " + tsd0.getName()); } }}