import java.util.ArrayList;
import java.util.List;public class Check {
public static void main(String[] args){
List<User> list=new ArrayList();
User user=new User(1,"liuweimin");
User user2=new User(2,"baishuang");
User user3=new User(3,"zhangxiaolei");
list.add(user);
list.add(user2);
list.add(user3);
for(User result:list){
if(result.getId()==2){
list.remove(result);
}
System.out.println("id:"+result.getId()+"\tname:"+result.getName());
}
}
}我想根据id号来删除对象,当id为2的时候,我要删除当前的这个对象,可是我这样运行后得出的结果却是它把我第三个对象给删了,而不是我所要删除的第二个对象,请问我该怎么写,希望能解释的具体点,最好是能把改好后的代码发一下,谢谢了
import java.util.List;public class Check {
public static void main(String[] args){
List<User> list=new ArrayList();
User user=new User(1,"liuweimin");
User user2=new User(2,"baishuang");
User user3=new User(3,"zhangxiaolei");
list.add(user);
list.add(user2);
list.add(user3);
for(User result:list){
if(result.getId()==2){
list.remove(result);
}
System.out.println("id:"+result.getId()+"\tname:"+result.getName());
}
}
}我想根据id号来删除对象,当id为2的时候,我要删除当前的这个对象,可是我这样运行后得出的结果却是它把我第三个对象给删了,而不是我所要删除的第二个对象,请问我该怎么写,希望能解释的具体点,最好是能把改好后的代码发一下,谢谢了
解决方案 »
- Notepad++的正则匹配问题
- liunx 启动 tomcat 太慢。。。。
- 抽象类问题
- 如何将oracle的表导入access
- 郁闷呀jsp+mysql问题
- 怎么知道字符串的编码格式
- 请大家看这个hibernate+spring的问题.
- 急啊,快来帮帮我,jxl读取excel中日期的问题!
- 那位大虾讲解一下,weblogic+jbuilder7+oracle的整合。给分
- tomcat上面项目运行正常,weblogic下面出现•There is no Action mapped for namespace [/] and acti
- 新手求问websphere
- hibernate继承类的问题?
打印的方式不对import java.util.ArrayList;
import java.util.List;public class Check {
public static void main(String[] args) {
List<User> list = new ArrayList();
User user = new User(1, "liuweimin");
User user2 = new User(2, "baishuang");
User user3 = new User(3, "zhangxiaolei"); list.add(user);
list.add(user2);
list.add(user3); for (User result : list) {
if (result.getId() == 2) {
list.remove(result);
System.out.println("删除:");
System.out.println("id:" + result.getId() + "\tname:"
+ result.getName());
}
}
System.out.println("剩下:");
for (User result : list) {
System.out.println("id:" + result.getId() + "\tname:"
+ result.getName());
}
}
}
for(User result:list){
if(result.getId()==2){ //当id=2时for循环还没有结束,result继续取下一个,下一个id是3不会进入if,此时result就不是被删除的那个了
list.remove(result);
}
System.out.println("id:"+result.getId()+"\tname:"+result.getName());
list.remove(result);
break;
}你是想打印被删除的数据吧。如果是的话在循环里面打印if(result.getId()==2){
list.remove(result);
System.out.println("id:"+result.getId()+"\tname:"+result.getName());
break;
}
if(result.getId()==2){
list.remove(result);
}
如果条件改为==1,或者==3都会抛出 java.util.ConcurrentModificationException异常。
当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。 很不解,等高手解释
delUser.setI(4);
list.remove(delUser);
System.out.println(list);修改 equals、hashcode方法当i相同对象相同即可
用for-each遍历 实际上使用的是Iterator迭代器
Iterator的工作机制:
Iterator是工作在一个独立的线程中,并且拥有一个 mutex锁,就是说Iterator在工作的时候,是不允许被迭代的对象被改变的。Iterator被创建的时候,建立了一个内存索引表(单链表),这 个索引表指向原来的对象,当原来的对象数量改变的时候,这个索引表的内容没有同步改变,所以当索引指针往下移动的时候,便找不到要迭代的对象,于是产生错 误。List、Set等是动态的,可变对象数量的数据结构,但是Iterator则是单向不可变,只能顺序读取,不能逆序操作的数据结构,当 Iterator指向的原始数据发生变化时,Iterator自己就迷失了方向。建议解决方法:
1、再定义一个List,用来保存需要删除的对象:
修改部分代码:
List<User> userRemove = new ArrayList<User>();
//找出要删除的用户
System.err.println("要删除的用户:");
for (User result : list)
{
if (result.getId() == 1 || result.getId() == 3)
{
userRemove.add(result); System.err.println("id:" + result.getId() + "\tname:" + result.getName());
}
}
list.removeAll(userRemove); //剩下的用户
System.err.println("剩下的用户:");
for (User result : list)
{
System.err.println("id:" + result.getId() + "\tname:" + result.getName());
}2,不用for-each循环,用原始的书写方式: 此方式如果按对象删除可以如下写、如果想按索引来删除 请倒叙循环
for (int i = 0; i < list.size(); i++)
{
User result = list.get(i);
if (result.getId() == 3)
{
list.remove(result);
System.err.println("id: " + result.getId() + "\tname: " + result.getName());
}
}3、用迭代器删除
Iterator<User> it = list.iterator();
while (it.hasNext())
{
User userObj = it.next();
if (userObj.getId() == 3)
{
it.remove();
}
}
//剩下的用户
System.err.println("剩下的用户:");
for (User result : list)
{
System.err.println("id:" + result.getId() + "\tname:" + result.getName());
}三种方式 任你选择 看你喜欢
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final User other = (User) obj;
if (id != other.getId())
return false;
return true;
}
这样删除是不行的,同学,会报 java.util.ConcurrentModificationException异常。
要通过Iterator迭代删除才不会有问题!
Iterator<User> it = list.iterator();
while (it.hasNext())
{
User userObj = it.next();
if (userObj.getId() == 3)
{
it.remove();
}
}
//剩下的用户
System.err.println("剩下的用户:");
for (User result : list)
{
System.err.println("id:" + result.getId() + "\tname:" + result.getName());
}
楼上说的。 1楼的那种的确会报 java.util.ConcurrentModificationException 异常的
重写Bean
@Override
public String toString() {
// TODO Auto-generated method stub
return "i:"+i+",string:"+this.string;
}
@Override
public boolean equals(Object obj) {
User u=null;
if(obj instanceof User)
u=(User) obj;
return u.getI()==this.i;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return super.hashCode();
}
_{___{__}\
{_} `\)
{_} ` _.-''''--.._
{_} //'.--. \___`.
{ }__,_.--~~~-~~~-~~-::.---. `-.\ `.)
`-.{_{_{_{_{_{_{_{_// -- 8;=- `
`-:,_.:,_:,_:,.`\\._ ..'=- ,
// // // //`-.`\` .-'/
<< << << << \ `--' /----)
^ ^ ^ ^ `-.....--'''
你叫孙军强啊--|
问题回答的不错