在使用List集合(或者其他普通的集合)进行迭代(或者普通的for循环时),并不能进行增加和删除操作。
要解决这个问题可以从内部代码找到原因:
这是因为在代码中,hasNext()判断的条件是:cursor!=size,而size是动态变化的。如果原来size是2,初始cursor是0,删去了第一个元素后,size就是1,而cursor在访问下一个元素时,cursor+1,为1,故这样就跳过了原来的第二个元素。
下面划重点,如果要在遍历java集合的时候进行这些操作怎么办:
1.可以使用iterator自带的remove()方法。
2.如果是在多线程的环境下,可以使用concurrentHashMap来代替hashMap,用
CopyOnWriteArrayList来代替list。这些均是线程安全的java集合。
另外,附上集合的一些使用注意点:
一个实例的迭代器仅仅能使用一次。即
Iterator<user> userIterator = userList.iterator();
userIterator.next()只能在一个地方使用。因为被迭代完毕后,这里面就没有东西可以迭代了。
如果还需要使用迭代器获得内容,只能重新再获得一个了。Iterator<user> userIterator = userList.iterator();