本帖最后由 It's_Zero 于 2012-5-14 22:44 编辑
嗯 我看了下 我是想发是 it本身是指针 因为通过JDK的源码发现
Hast 是HashMap的一种特殊形式
public HashSet() {
map = new HashMap<E,Object>();
}
private final class KeyIterator extends HashIterator<K> {
public K next() {
return nextEntry().getKey();
}
}
所以他是从HashMap中获得Key值 ,也就是指向Value的索引值
所以执行it.remove(); 是删除这个索引
而Iterator中只有void remove();并没有其他的带参数的remove方法 .所以s.remove("abc"); 这个方法的调用是错误的,呵呵呵 这个你完全可以自己覆盖写一个这个方法- public static void main(String[] args) throws InterruptedException {
- Collection s = new HashSet();
- s.add(32);
- s.add("abc");
- s.add("aaa");
- Iterator it = s.iterator();
- while (it.hasNext()) {
- if (it.next().equals("abc")) {
- // it.remove(); //为什么这样操作就是ok
- // s.remove("abc"); //这样就包异常了呢?
- System.out.println(it);//输出 java.util.HashMap$KeyIterator@13c5982// HashMap类中的对象KeyIterators(私有内部类) 返回的是key值
- s.add(45); // 这样也报异常呢?
- }
- }
- System.out.println(s);
- System.out.println(s.size());
- }
复制代码 |