关于TreeMap删除的问题~求教~

wqjordan23 2010-03-11 05:49:48
上课时候的一个小例子,是个网上书店。书都是放在TreeMap里的,通过迭代显示在页面上,在购物车一个页面里有删除的按钮,但是每次删除时候只能倒序的删除,也就是说第一次买BOOK A,第二次买BOOK B, 第三次买BOOK C,购买以后跳转到该购物车页面后选中一本书删除,只有按照CBA的方法才能正确删除,如果直接选择B或A的话会报异常,(虽然报异常了,但是其实该书也已经被删除了),请问是什么原因?

删除的servlet代码如下:
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
int id = Integer.parseInt(req.getParameter("id"));
int amount =Integer.parseInt(req.getParameter(req.getParameter("id")));
HttpSession session = req.getSession();
Map sessionmap = (TreeMap)session.getAttribute("cartList");
Set set = sessionmap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
int id2 = (Integer)it.next();
if(id==id2){
sessionmap.remove(id);
}
}
req.getRequestDispatcher("/ListCart.jsp").forward(req,resp);
}



请指教。。。。。
...全文
165 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wqjordan23 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 orangemike 的回复:]
你在迭代一个集合的过程中,不要调用集合的remove方法删除对象.
而是要调用迭代器Iterator.remove.

Java code
Iterator it= set.iterator();while(it.hasNext()){int id2= (Integer)it.next();if(id==id2){
it.remove();
}
}
[/Quote]

正解,果然有效。是什么道理呢?
wqjordan23 2010-03-11
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 orangemike 的回复:]
又看了一下你的代码,不知道你为什么还要迭代比较id? id就是那个treeMap的key啊?你直接sessionmap.remove(id)即可.如果返回null则表示没有这个id
你好好看看JDK吧
[/Quote]
主要我KEY的ID也就是BOOK的ID,所以比较一下
orangemike 2010-03-11
  • 打赏
  • 举报
回复
又看了一下你的代码,不知道你为什么还要迭代比较id? id就是那个treeMap的key啊?你直接sessionmap.remove(id)即可.如果返回null则表示没有这个id
你好好看看JDK吧
orangemike 2010-03-11
  • 打赏
  • 举报
回复
你在迭代一个集合的过程中,不要调用集合的remove方法删除对象.
而是要调用迭代器Iterator.remove.


Iterator it = set.iterator();
while(it.hasNext()){
int id2 = (Integer)it.next();
if(id==id2){
it.remove();
}
}

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧