黑马程序员技术交流社区

标题: ArrayList删除对象的问题 [打印本页]

作者: 张甲甲    时间: 2013-5-26 22:48
标题: ArrayList删除对象的问题
本帖最后由 张甲甲 于 2013-5-27 10:04 编辑

我在一个ArraylistList里面加入了几个学生对象 我想删除其中的女学生
可是老是出异常
请大家帮着看看 我是菜鸟 真心求指点

代码如下:
package com.itheima;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Iterator;

import javax.swing.JOptionPane;
public class Test{
public static void main(String args[]) throws IOException
{
        ArrayList al=new ArrayList();
        al.add(new Student('男',20,"zhang1"));
        al.add(new Student('女',21,"zhang2"));
        al.add(new Student('男',22,"zhang3"));
        al.add(new Student('女',22,"zhang4"));
        Iterator it=al.iterator();
        while(it.hasNext()){
                Student s=(Student) it.next();
                if(s.sex=='女'){
                        al.remove(s);
                        
                }
               
        }
}
}

class Student {
        char sex;
        int age;
        @Override
        public String toString() {
                return "Student [sex=" + sex + ", age=" + age + ", name=" + name + "]";
        }
        String name;
        public Student(char sex, int age, String name) {
                super();
                this.sex = sex;
                this.age = age;
                this.name = name;
        }
        
        
}



作者: Changer_s    时间: 2013-5-26 23:01
if(s.sex.equals('女')){    >>>最好用equals
           al.remove(s);
  }

你把class Student 前面加一个public,再试试,我记得以前也出现过错误,就是访问修饰符不一致的问题
作者: 王溢君    时间: 2013-5-26 23:05
迭代时,不能使用集合的方法操作元素。懂吗?得使用迭代器的方法删除。
作者: 张甲甲    时间: 2013-5-26 23:08
王溢君 发表于 2013-5-26 23:05
迭代时,不能使用集合的方法操作元素。懂吗?得使用迭代器的方法删除。

不懂 能不能说的详细点啊 谢了 啊
作者: 王溢君    时间: 2013-5-26 23:20
就是你在使用迭代器遍历集合时。只能使用迭代器的方法删除元素。。。。。不能用集合本身的方法删。   if(s.sex=='女'){
                        al.remove(s);
                       
                }改下it.remove();就是了。
作者: Miss小强    时间: 2013-5-26 23:30
  if(s.sex=='女'){
                        al.remove(s);
         }
并发修改异常;
使用Iterator迭代器迭代的时候是不能增删的;
如果确实要的话使用listIterator迭代器;
至于为什么迭代的时候不能进行增删操作;
参照线程锁的概念去理解;
不过现在建议使用jdk1.5的并发集合;
希望对你有用

作者: 张甲甲    时间: 2013-5-26 23:31
王溢君 发表于 2013-5-26 23:20
就是你在使用迭代器遍历集合时。只能使用迭代器的方法删除元素。。。。。不能用集合本身的方法删。   if(s. ...

嗯 能用了 就是不大明白原理
谢了
作者: 刘兆华    时间: 2013-5-26 23:44
毕老师好像在视频里说过,迭代时不要操作元素。
你这个解决方法:

将迭代换成高级for循环, 那个不知道你学没学呢..
先告诉你个格式,如果没学到你学的时候就明白了。

  1. for(Student al1:al)
  2.                         {
  3.                                 System.out.println(al1.toString());
  4.                         }
复制代码
从你那iterator那 一直删到while循环结束  换成这个。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2