说明:如下更改值后,在删除set元素时,
如果先删除未更改元素(成功),再删除已更改元素(如果有重复),则删除成功!再删除重复值,失败。
如果先删除已更改元素(失败),再删除未修改元素(成功),再删除重复元素(成功)。
总结:说明TreeSet在删除未修改元素后,会重建索引!
重要的是:重建索引后,所有的重复值都可以被删除!
class R implements Comparable
{int count;
public R(int count)
{
this.count = count;
}
public String toString()
{
return "R[count:" + count + "]";
}
public boolean equals(Object obj)
{
if (this == obj)
{
return true;
}
if(obj != null && obj.getClass() == R.class)
{
R r = (R)obj;
return r.count == this.count;
}
return false;
}
public int compareTo(Object obj)
{
R r = (R)obj;
return count > r.count ? 1 :
count < r.count ? -1 : 0;
}
}
public class TreeSetTest3
{
public static void main(String[] args)
{
TreeSet ts = new TreeSet();
R a = new R(5);
R b = new R(-3);
R c = new R(9);
R d = new R(-2);
ts.add(a);
ts.add(b);
ts.add(c);
ts.add(d);
System.out.println(ts);
c.count = 20;
last.count = -2;
System.out.println(ts);
System.out.println("delete new R(-2):");
System.out.println(ts.remove(new R(-2)));
System.out.println(ts);
System.out.println("delete new R(5):");
System.out.println(ts.remove(new R(5)));
System.out.println("delete new R(-2):");
System.out.println(ts.remove(new R(-2)));
System.out.println(ts);
}
}