Java List接口概述
List接口概述
- 鑒于Java中數組用來存儲數據的局限性,我們通常使用List替代數組
- List集合類中元素有序、且可重復,集合中的每個元素都有其對應的順序索引。
- List容器中的元素都對應一個整數型的序號記載其在容器中的位置,可以根據
序號存取容器中的元素。 - JDK API中List接口的實現類常用的有:ArrayList、LinkedList和Vector。
List接口方法
List除了從Collection集合繼承的方法外,List 集合里添加了一些根據索引來
操作集合元素的方法。
- void add(int index, Object ele):在index位置插入ele元素
- boolean addAll(int index, Collection eles):從index位置開始將eles中
的所有元素添加進來 - Object get(int index):獲取指定index位置的元素
- int indexOf(Object obj):返回obj在集合中首次出現的位置
- int lastIndexOf(Object obj):返回obj在當前集合中末次出現的位置
- Object remove(int index):移除指定index位置的元素,并返回此元素
- Object set(int index, Object ele):設置指定index位置的元素為ele
- List subList(int fromIndex, int toIndex):返回從fromIndex到toIndex
位置的子集合
List實現類之一:ArrayList
- ArrayList 是 List 接口的典型實現類、主要實現類
- 本質上,ArrayList是對象引用的一個”變長”數組
- ArrayList的JDK1.8之前與之后的實現區別?
->JDK1.7:ArrayList像餓漢式,直接創建一個初始容量為10的數組
->JDK1.8:ArrayList像懶漢式,一開始創建一個長度為0的數組,當添加第一個元
素時再創建一個始容量為10的數組 - Arrays.asList(…) 方法返回的 List 集合,既不是 ArrayList 實例,也不是
Vector 實例。 Arrays.asList(…) 返回值是一個固定長度的 List 集合
List實現類之二:LinkedList
對于頻繁的插入或刪除元素的操作,建議使用LinkedList類,效率較高
新增方法
- void addFirst(Object obj)
- void addLast(Object obj)
- Object getFirst()
- Object getLast()
- Object removeFirst()
- Object removeLast()
LinkedList:雙向鏈表,內部沒有聲明數組,而是定義了Node類型的first和last,
用于記錄首末元素。同時,定義內部類Node,作為LinkedList中保存數據的基
本結構。Node除了保存數據,還定義了兩個變量:
- prev變量記錄前一個元素的位置
- next變量記錄下一個元素的位置
雙向鏈表結構圖
List 實現類之三:Vector
Vector 是一個古老的集合,JDK1.0就有了。大多數操作與ArrayList
相同,區別之處在于Vector是線程安全的。
在各種list中,最好把ArrayList作為缺省選擇。當插入、刪除頻繁時,
使用LinkedList;Vector總是比ArrayList慢,所以盡量避免使用
新增方法:
void addElement(Object obj)
void insertElementAt(Object obj,int index)
void setElementAt(Object obj,int index)
void removeElement(Object obj)
void removeAllElements()
ArrayList/LinkedList/Vector的異同
ArrayList和LinkedList的異同
二者都線程不安全,相對線程安全的Vector,執行效率高。
此外,ArrayList是實現了基于動態數組的數據結構,LinkedList基于鏈表的數據結構。對于
隨機訪問get和set,ArrayList覺得優于LinkedList,因為LinkedList要移動指針。對于新增
和刪除操作add(特指插入)和remove,LinkedList比較占優勢,因為ArrayList要移動數據。
ArrayList和Vector的區別
Vector和ArrayList幾乎是完全相同的,唯一的區別在于Vector是同步類(synchronized),屬于
強同步類。因此開銷就比ArrayList要大,訪問要慢。正常情況下,大多數的Java程序員使用
ArrayList而不是Vector,因為同步完全可以由程序員自己來控制。Vector每次擴容請求其大
小的2倍空間,而ArrayList是1.5倍。Vector還有一個子類Stack。
總結
以上是生活随笔為你收集整理的Java List接口概述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Web编程核心
- 下一篇: Java编写的统计字符代码