为了账号安全,请及时绑定邮箱和手机立即绑定

来吧,有问题了,大家共同进步

package start;


import java.util.HashMap;

import java.util.HashSet;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Scanner;

import java.util.Set;


public class TestSet {


Map<String,Student> mt = new HashMap<String,Student>();

Scanner Input = new Scanner(System.in);

public void addElement(){

int i = 0;

while(i < 3){

System.out.println("请输入学生ID:");

String id = Input.next();

if(mt.get(id) == null){

System.out.println("请输入学生姓名:");

String name = Input.next();

Student newstudent = new Student(id,name);

System.out.println("学生信息成功存入档案!");

mt.put(id, newstudent);

i++;

}else{

System.out.println("学生ID已经被占用!!");

continue;

}

 }

}

public void getElement(){

Set<String> set = new HashSet();

set = mt.keySet();

for (String string : set) {

Student test = mt.get(string);

if(test != null)

System.out.println("学生姓名为:"+test.Name);

}

}

public void Remove(){

System.out.println("请输入你要删除的学生ID:");

String Id = Input.next();

Set<String> set = new HashSet();

set = mt.keySet();

for ( String key : set) {

if(Id.equals(key))

mt.remove(key);

}

}

public void EntrySet(){

Set<Entry<String,Student>> entryset = mt.entrySet();

for (Entry<String, Student> entry : entryset) {

System.out.println(entry.getValue().Name);

}

}

public static void main(String[] args) {

TestSet te = new TestSet();

te.addElement();

te.getElement();

te.Remove();

te.EntrySet();

}

}



这是问题


请输入学生ID:

1

请输入学生姓名:

1

学生信息成功存入档案!

请输入学生ID:

2

请输入学生姓名:

2

学生信息成功存入档案!

请输入学生ID:

3

请输入学生姓名:

3

学生信息成功存入档案!

学生姓名为:3

学生姓名为:2

学生姓名为:1

请输入你要删除的学生ID:

3

Exception in thread "main" java.util.ConcurrentModificationException

at java.util.HashMap$HashIterator.nextEntry(Unknown Source)

at java.util.HashMap$KeyIterator.next(Unknown Source)

at start.TestSet.Remove(TestSet.java:46)

at start.TestSet.main(TestSet.java:64)

????我想知道为什么会出现这种错误呢???

正在回答

3 回答

专门去网上搜了下,答案挺高深的,对于我这个菜鸟都算不上的,真心看不懂。只是给你个地址,去看看吧。

http://bbs.csdn.net/topics/370149418

【如果我对集合添加删除一共操作了10次,此时modCount为10,  获取迭代器的时候expectedModCount也为10,  迭代期间会去 checkForComodification()!  只要在next或者remove之前有对集合操作的动作导致modCount发生了改变, 就会 抛那个并发修改异常!】

0 回复 有任何疑惑可以回复我~
#1

怒放的生命012 提问者

非常感谢!
2016-08-20 回复 有任何疑惑可以回复我~

问题出在Remove方法中的if判断语句,用==不能用equals方法

0 回复 有任何疑惑可以回复我~

public void Remove()这个方法显示是错误的根源


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

来吧,有问题了,大家共同进步

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信