0
import java.util.*;
class KeyMaster {
    public int i;
    public KeyMaster(int i) { this.i = i; }
    public boolean equals(Object o) { return i == ((KeyMaster)o).i; }
    public int hashCode() { return i; }
}

public class MapIt {
    public static void main(String[] args) {
            Set<KeyMaster> set = new HashSet<KeyMaster>();
        KeyMaster k1 = new KeyMaster(1);
        KeyMaster k2 = new KeyMaster(2);
        set.add(k1); set.add(k1);
        set.add(k2); set.add(k2);
        System.out.print(set.size() + “:”);
        k2.i = 1;
        System.out.print(set.size() + “:”);
            set.remove(k1);
        System.out.print(set.size() + “:”);
        set.remove(k2);
        System.out.print(set.size());
     }
  }

結果は?

A. 4:4:2:2
C. 2:2:1:0
E. 2:1:0:0
G. 4:3:2:1
B. 4:4:3:2
D. 2:2:0:0
F. 2:2:1:1
Answer: F

誰でも答えを説明できますか。私の疑問はこれです。K2 の i は変更されましたが、セットにはまだ 2 つの要素があり、そのうちの 1 つは、変更された k2 によって参照されるオブジェクトをまだ参照していると思います。では、なぜ remove(k2) が機能しないのでしょうか?

4

1 に答える 1