怒放的生命012
2016-06-09 21:28
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)
????我想知道为什么会出现这种错误呢???
专门去网上搜了下,答案挺高深的,对于我这个菜鸟都算不上的,真心看不懂。只是给你个地址,去看看吧。
http://bbs.csdn.net/topics/370149418
【如果我对集合添加删除一共操作了10次,此时modCount为10, 获取迭代器的时候expectedModCount也为10, 迭代期间会去
checkForComodification()! 只要在next或者remove之前有对集合操作的动作导致modCount发生了改变, 就会
抛那个并发修改异常!】
问题出在Remove方法中的if判断语句,用==不能用equals方法
public void Remove()这个方法显示是错误的根源
Java入门第三季
409792 学习 · 4340 问题
相似问题