Java ArrayList 删除元素
我们都知道,在Java中,对于普通的数组array
,在声明过后,数组的长度就是固定的。如果要更改数组中的元素,可以按索引进行修改。但是,如果要删除一个元素,在不移动元素的情况下,只能通过将要删除元素处的值置空的方式来实现。
举个简单的例子
|
如果要移动元素的话
for(int i = 2; i < people.length - 1; i++){ |
在普通的数组中,单纯地删除某个元素,只能通过将其值置空来完成。所以不可避免的,会在数组之中留下”孔”,如果一个数组中留下很多”孔”的话,对内存是一种损耗,同时也不利于开发。为了更加便于操作,并且避免留下不好看的”孔”,我们使用ArrayList
。
ArrayList<Person> people = new ArrayList<>(); |
显然,remove()
是一个好的选择,如果我们要删除好几个元素呢?现在我们使用循环来处理
ArrayList<Person> people = new ArrayList<>(); |
看起来没有任何问题,现在我们让这段代码跑起来,于是你得到了:
Exception in thread "main" java.util.ConcurrentModificationException |
怎么会有一个Exception呢?好了这个问题我也不会,下次再说吧
这里明确指出的27行,是for循环的位置,也就是,我们不能使用for循环来删除元素
确实如此,因为,你不能在遍历集合的同时更改它的元素,这是不允许的。(不仅限于删除
那如果我需要在循环遍历的时候删除掉元素,该怎么办呢?
这个时候我们就要使用Iterator
类了,Iterator类只包含了三个方法
hasNext()
: 判断集合是否还有下一个元素,返回false或true
next()
: 返回集合中的下一个元素
remove()
: 删除集合中的一个元素
Iterator<Person> persons = people.iterator(); |
*在Java中,你不能在遍历集合的同时更改其元素 *
- 本文作者: Naskete
- 本文链接: https://Naskete.github.io/2020/10/20/essay/Java-ArrayList删除元素/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!