Java實用:List類中的add、addAll和set方法


Java中有一個用於表示線性表的List接口,其中包含add、addAll和set三個用於向表中插入元素的方法:

一、add方法:
List接口中的add方法有如下兩種重載方式:
① boolean add(E e);
② void add(int index, E element);
其中,方法①用於向列表的末尾插入新元素,這也是List接口中最常用的插入方法;方法②則可以在插入操作過程中指定插入的位置,此時,會自動將當前位置及只有的元素后移進行插入,需要注意的是,參數index的值不可大於當前list的容量,即在使用此方法填充一個list時,必須以0開始依次填充。

第二種用法使用的時候,若ArrayList對象初始化時不包含任何元素size的值為0,此時向下標為n(n>0)的位置添加元素時,就會拋出異常。即使在創建list對象時指定了初始化大小,依舊會有以上問題,比如List<String> stringList = new ArrayList<>(100)這類指定初始化大小並不能避免出現上面的異常。

 

二、addAll方法:

addAll方法和add方法類似,區別在於addAll方法可以一次插入一個集合中的多個元素,重載方法也有兩種:
① boolean addAll(Collection<? extends E> c);
② boolean addAll(int index, Collection<? extends E> c);
對於包含下標參數index的方法②,在使用時具有和包含index參數的add方法同樣的限制條件,在執行插入前同樣會檢查size的值,如果指定的index值大於size值,則會拋出異常。
其次,addAll方法中的集合c不可以傳入null值,否則會有異常。
另外,該方法是非線程安全的,當傳入的參數c正在被另一個線程操作時,其結果是不確定的。

 

三、set方法:

set方法直觀上根據方法名可以理解為設置list中某個位置的元素。該方法本質上是一種替換操作,即要設置某個位置上的元素,這個位置在設置前必須有元素,否則會拋出異常。與Map的set方法用法有一定區別(有則覆蓋、無則添加)。

對於某些應用,需要以亂序的方式插入到list中,這時候將list作為隊列或棧使用就不太合適。比如當從數據庫中讀取數據到list中時,要保證list中的數據有序,但數據庫的存儲是不保序,雖然可以讀取到內存以后再進行排序,但是考慮到數據量比較大,讀取到內存再排序的性能比較低,因此,可以決定在數據庫中存儲每條數據的序號,然后讀取數據的時候在根據序號直接添加到list里面,這個時候就需要以亂序的方式插入list,對於可能出現的異常,可以采取預填充的方式。



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM