remove的情况跟hasCode和equals有关
0 0 3的问题很明显,你三次都是调用的b1.setF

解决方案 »

  1.   

    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    import java.util.Set;
    import java.util.TreeSet;
    public class aa
    {
    public static void main(String[] args) 
    {
    TreeSet<b> set=new TreeSet<b>();

    b b1=new b(1,1);
    b1.setF(1);
    set.add(b1);

    b b2=new b(2,2);
    b2.setF(2);
    set.add(b2);

    b b3=new b(3,3);
    b3.setF(3);
    set.add(b3);

          Iterator<b> it=set.iterator();
    while(it.hasNext())
    System.out.println(it.next().getF());

    set.descendingSet();
    set.remove(set.first());
    System.out.println(set.size());

    }class b implements Comparable<b>
    {
    int f;
    int x,y; public b(int i, int j) {
    x=i;
    y=j;
    }
    @Override
    public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + f;
    result = prime * result + x;
    result = prime * result + y;
    return result;
    }
    @Override
    public boolean equals(Object obj) {
    if (this == obj)
    return true;
    if (obj == null)
    return false;
    if (getClass() != obj.getClass())
    return false;
    b other = (b) obj;
    if (f != other.f)
    return false;
    if (x != other.x)
    return false;
    if (y != other.y)
    return false;
    return true;
    }
    public int compareTo(b o) 
    {
    if(this.f==o.getF())
    return 1;
    return this.f-o.getF();
    }
    public int getF() {
    return f;
    } public void setF(int f) {
    this.f = f;
    }}第一个问题疏忽了  添加了 hashcode 和equals
    为什么结果还是3如果我要删除treeset中某一个节点  除了Iterator删除  还有没有什么好的办法