set的问题

package test;

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;

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() + ":");
		System.out.println(k2.hashCode()) ;*/
		k2.i = 1;
		System.out.println(k1.equals(k2)) ;
		System.out.println(set.size() + ":");
		set.remove(k1);
		System.out.println(set.contains(k2)) ;
		System.out.println(set.size()) ;
		set.remove(k2) ;
		System.out.println(set.contains(k2)) ;
		Iterator it = set.iterator() ;
		
		while(it.hasNext()){
			System.out.println((it.next()).getClass().getName()) ;
		}
		/*System.out.println(k1.hashCode()) ;
		System.out.print(set.size() + ":");
		System.out.println(k2.hashCode()) ;
		set.remove(k2);
		System.out.print(set.size());*/
	}
}

set.remove(k1)已经删除k1了,set中没有k1和k2,为什么set的size为1呢?
System.out.println(set.contains(k2)) ;为false,为什么还能set.remove(k2) ;呢?大家看看啊!

你可能感兴趣的:(java)