每天進步一點點_遍歷集合刪除元素的異常


今天做的一道測試題出現的,覺得有必要記錄一下,這裏作簡要說明;

題目和代碼如下:

package com.itheima;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Test2
{
	/*
	 * 2、 一個ArrayList對象aList中存有若干個字符串元素,現欲遍歷該ArrayList對象,
	 * 刪除其中所有值爲"abc"的字符串元素,請用代碼實現。
	 * 分析:
	 * 1.創建集合對象;
	 * 2.向集合中添加元素;
	 * 3.遍歷集合中的元素,並判斷這個元素是否和"abc"相同,如果相同就刪除
	 * 步驟:
	 * 1.創建ArrayList集合對象aList
	 * 2.使用add()方法添加元素
	 * 3.使用Iterator()方法遍歷元素
	 * 4.使用equals方法判斷元素是否和"abc"相同
	 * 5.相同就使用remove()方法刪除該元素
	 */
	public static void main(String[] args)
	{
		//創建ArrayList集合對象aList
		List<String> aList = new ArrayList<String>();
		//添加元素
		aList.add("abc");
		aList.add("bcd");
		aList.add("cde");
		aList.add("abc");
		//遍歷集合中的元素並判斷元素是否和"abc"相同
		for(Iterator<String> it = aList.iterator();it.hasNext();)
		{
			if(it.next().equals("abc"))
			{
				it.remove();//這裏使用it調用remove方法,如果使用aList調用就會報錯
			}
		}
		//輸出刪除後,集合中的元素
		for(String str : aList)
		{
			System.out.println(str);
		}

	}


此題需要注意的是:

void remove()
從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操作)。

刪除集合中的元素,不能使用集合.remove(Object obj)刪除,這樣會出現java.util.ConcurrentModificationException

使用迭代器it.remove()可以避免這個問題


size(),length(),length的使用情況

size()用於獲取集合中元素的個數

length()用於獲取字符串長度

length用於獲取數組的長度


他們的角標位都是從0開始,都不包含尾角標元素

在獲取其對應角標最後的元素時,都要減去1:

str.charAt(length() - 1)

arr[arr.length-1]

list集合中的size()方法表示元素的個數,這裏不用-1

發佈了57 篇原創文章 · 獲贊 4 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章