1. 程式人生 > >List集合中的add和remove的問題

List集合中的add和remove的問題

這是一個重新整理三觀的問題:

這裡寫圖片描述

是的,你沒有看錯,list竟然不支援remove方法,那麼這是為什麼呢???

原因在於:

1、上述程式碼中Arrays.asList(strings)返回的list並不是我們所認知的ArrayList,我們可以點選asList這個方法,檢視他的原始碼

這裡寫圖片描述

他給我們返回的是一個Arrays這個類的一個內部類,這個類雖然和我們認知的ArrayList一樣繼承的都是AbstractList這個抽象類,但是這個內部類並沒有重寫add和remove這兩個方法,而我們認知的ArrayList是重寫了這兩個方法

這裡寫圖片描述

那麼沒有重寫這兩個方法的內部類,當然呼叫的是父類(AbstractList)中的這兩個方法,我們在來看看AbstractList這個類中的這兩個方法

這裡寫圖片描述

看到這,我想大家都應該明白了,為什麼直接使用add和remove這兩個方法會報異常了吧

解決辦法:

可以說非常慶幸的是ArrayList為我們提供了一個構造方法,引數剛好可以為那個內部類,這樣一來就能轉為我們認知的ArrayList類。即:List list1 = new ArrayList(Arrays.asList(strings));

這裡寫圖片描述