虽然不知道你这样写的目的,单就你的代码入手的话可以这样优化:
用倒序循环方式操作就行了for(int i=0;i<single.size();i++)
//改为
for(int i=single.size()-1; i >= 0; i--)

解决方案 »

  1.   

    single.remove(i);操作这个list 吧并没有修改session中的值 吧?你最后加个。session.setAttribute("goodslist",single); 试试
      

  2.   

    lz这种删除方式会导致删除不了全部元素,因为你删除了元素,Arraylist的长度变小了,索引也会改变,但是迭代的下标没有跟着变小。
    可以这样写:
    for(int i=0;i<single.size();i++)
    {
    ShopCar goods=(ShopCar)single.get(i);
    if(goods.getGoodsname().equals(name)&&goods.getUsername().equals(username))
    {
    single.remove(i);
    --i;//删除了元素,迭代的下标也跟着改变
    }
    再一点,删除操作完成之后再重新放置一遍session
      

  3.   

    1.把single.size拿出来赋给一个变量
    2.你删除完不放session,那session里面岂不是还是原来的list  int a = single.size();
    for(int i=0;i<a;i++){
    }
    最后再把删完的list放如session
    session.setAttribute("",xx);
      

  4.   

    我原先是重新写入了session中,可是还是没有用
      

  5.   

    public List<FlightPrice> DeepCopy(List<FlightPrice> listAll) throws IOException, ClassNotFoundException{
    List<FlightPrice> list=new ArrayList<FlightPrice>();
    ByteOutputStream byteout=new ByteOutputStream();
    ObjectOutputStream out=new ObjectOutputStream(byteout);
    out.writeObject(listAll);
    ByteArrayInputStream bytein=new ByteArrayInputStream(byteout.getBytes());
    ObjectInputStream in=new ObjectInputStream(bytein);
    list=(List<FlightPrice>) in.readObject();
    list.toString().getBytes();
    return list;
    }
    先把session里面的list取出来序列化复制为list2,然后修改list2,在把list2放进session就行了
      

  6.   

    谢谢大家,找到了问题。我将goodsname以另外一种方式提交就行了