TreeSet下のデータ構造
2616 ワード
import java.util.TreeSet;
class Z implements Comparable{
int age;
public Z(int age) {
super();
this.age = age;
}
public boolean equals(Object obj){
return true;
}
public int compareTo(Object obj){
return -1;
}
}
public class JiHeDemo{
public static void main(String[] args) {
TreeSet set=new TreeSet();
Z z=new Z(6);
set.add(z);
// true,
System.out.println(set.add(z));
// set,
System.out.println(set);
// age
(((Z)set.first())).age=9;
// set age , 9
System.out.println((((Z)set.first())).age);
}
}
プログラム中System.out.println(set.add(z));同じ要素を再度セットに追加します.このセットの中でcompreTo方法は合計1に戻ります.equals方法はtrueに戻りますが、Setセットについてはやはりzオブジェクトと彼自身が同じではないと思います.そのため、TreeSetは2つのzオブジェクトを追加できます.実は彼が追加したのは同じ要素です.異なる位置に置くだけです.したがって、最初の要素の最後の要素を変更すると変更されます.TreeSetに可変オブジェクトを追加した後、後のプログラムが可変オブジェクトのFileを修正すると他のオブジェクトとのサイズ順序が変更されますが、TreeSetは彼らの順序を再調整しません.import java.util.TreeSet;
class R implements Comparable {
int count;
public R(int count) {
this.count = count;
}
@Override
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;
if (r.count == this.count) {
return true;
}
}
return false;
}
// compareTo , count 。
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
R r = (R) o;
return count > r.count ? 1 : count < r.count ? -1 : 0;
}
}
public class JiHeDemo {
public static void main(String[] args) {
TreeSet ts = new TreeSet();
ts.add(new R(5));
ts.add(new R(-3));
ts.add(new R(9));
ts.add(new R(-2));
System.out.println(ts);
R first = (R) ts.first();
// count
first.count = 20;
R last = (R) ts.last();
last.count = -2;
// TreeSet , 。
System.out.println(ts);
// Filed 。
System.out.println(ts.remove(new R(-2)));
System.out.println(ts);
// Filed 。
System.out.println(ts.remove(new R(5)));
System.out.println(ts);
}
}
TreeSetセット内の可変要素のFiledを変更すると、再削除しようとしたときに削除に失敗します.