本帖最后由 calm677 于 2012-07-18 17:34:42 编辑

解决方案 »

  1.   

    remove的是值?enumeration得到的是键,与这个有关系吗。。
      

  2.   

    ConcurrentModificationException是因为你用迭代器的同时 还在外部用了remove 这是不允许的 你的remove操作也要在迭代器里完成
    尝试用一下CopyOnWriteArrayList 不过它的Iterator迭代出的值只是Iterator创建的 和后来修改无关.........
      

  3.   

    Iterator的next方法里面会调用 checkForComodification()判断集合是否被修改过,如果修改过就抛出ConcurrentModificationException异常。所以你的程序虽然是在其他地方remove,却是在next处抛异常。这个和是否是线程安全的没关系,是迭代器不允许。Enumeration的nextElement方法没有进行“集合是否被修改”的检测,所以没有抛出异常。
      

  4.   

    Hashtable 中的迭代器不是线程安全的建议使用 ConcurrentHashMap 这个是真正意义上的线程安全,包括迭代器另外,如果你想实现 LRU 算法的 Map 的话,推荐使用继承 LinkedHashMap 重写 removeEldestEntry 方法就可以了。
      

  5.   

    只有Hashtable本身的方法才是线程安全的,Iterator中的remove已经不是Hashtable中的方法了