在做项目的过程中,我们时常回遇到这样一种状况:“判定一个对象是否已经存在与Collection或Map,如果不存在于其中,就将该对象加入到Collection或Map中”。这种需求对于新手经常用下边的代码来完成:
这样做法就会报出一个异常:java.util.ConcurrentModificationException,其实这个原因很简单,就是在便利list的时候,如果这个对象不存在就加入list,那么这个for循环中list的长度其实是变化的。所以我们一般真确的做法是:
如果是Map的话就更简单了,就直接用containsKey或contaiValue就可以判定key或value是否存在于Map中了,具体做法这里就不在赘述。
List<Integer> list = new ArrayList<Integer>();
List<Integer> checkList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
list.add(i);
}
for (int k = 5 ; k < 7; k++) {
checkList.add(k);
}
/**
* 判定checkList中的元素是否在list中已经存在
*/
for (Integer checkNum : checkList) {
for (Integer num : list) {
//当list中不存在这个对象是就判定将这个 对象加入到list中
if (checkNum != num) {
list.add(checkNum);
}
}
}
这样做法就会报出一个异常:java.util.ConcurrentModificationException,其实这个原因很简单,就是在便利list的时候,如果这个对象不存在就加入list,那么这个for循环中list的长度其实是变化的。所以我们一般真确的做法是:
List<Integer> list = new ArrayList<Integer>();
List<Integer> checkList = new ArrayList<Integer>();
for (int i = 0; i < 5; i++) {
list.add(i);
}
for (int k = 5 ; k < 7; k++) {
checkList.add(k);
}
/**
* 判定checkList中的元素是否在list中已经存在
*/
for (Integer checkNum : checkList) {
if (!list.contains(checkNum)) {
list.add(checkNum);
}
}
如果是Map的话就更简单了,就直接用containsKey或contaiValue就可以判定key或value是否存在于Map中了,具体做法这里就不在赘述。