List介面及其主要實現類
List介面繼承和擴充套件了Collection介面,List介面表示具有順序的集合,其中可以包含重複元素。使用此介面的實現類時,可以對列表中每個元素的插入位置進行精確的控制,使用者可以根據元素的整數索引(在列表中的位置)訪問元素,並搜尋列表中的元素。List介面中宣告的常用方法如表1所示
方法宣告 | 方法功能 |
void add(int index,Object element) | 在列表的index位置新增元素 |
Object remove(int index) | 刪除列表中index位置的元素 |
Object get(int index) | 返回列表index位置的元素 |
Object set(int index,Object element) | 用指定元素替換列表中指定位置的元素 |
int indexOf(Object o) | 返回列表中首次出現指定元素的索引,如果列表中不包含此元素,則返回-1 |
int lastIndexOf(Object o) | 返回列表中最後出現指定元素的索引,如果列表中不包含此元素,則返回-1 |
List介面的實現類主要有ArrayList、Stack、Vector和LinkedList。
1、ArrayList類
ArrayList類以陣列為資料結構實現了List介面,用於表述長度可變的陣列列表。在ArrayList中使用物件陣列儲存資料,呼叫new ArrayList()後,它會預設初始化一個size=10的陣列。每次add操作都要檢查陣列容量,如果不夠,重新設定一個初始容量為1.5倍大小的新陣列,然後再把每個元素複製過去。在陣列中間插入或刪除,都要移動後面的所有元素。
ArrayList實際上是一種容器(Collection),其中可以儲存任意數量的元素,每個元素都是一個物件。宣告和建立ArrayList物件時,還需要指定元素的型別,例如
ArrayList<String> notes=new ArrayList<String>();
ArrayList類中的常用方法
方法宣告 | 方法功能 |
public boolean add(E o) | 向ArrayList容器中新增元素 |
public int size() | 獲得ArrayList容器中元素的個數 |
public E get(int index) | 返回index位置的元素 |
public E remove(int index) | 刪除index位置的元素 |
2、Vector向量
Vector類也實現了List介面,也用於表述長度可變的物件陣列表列。與ArrayList的差別是:Vector是同步(執行緒安全)的,執行效率低,主要用於線上程環境中;而ArrayList是不同步的,適合在單執行緒環境中使用。除了實現了List介面中定義的方法外,Vector常用方法如下表所示
方法宣告 | 方法功能 |
public Vector() | 構造一個空向量,使其內部資料陣列的大小為10,其標準容量增量為零 |
public E elementAt(int index) | 返回index位置的元素 |
public void addElement(E obj) | 在向量末尾新增元素 |
public void removeElementAt(int index) | 移除index位置的元素 |
public void insertElementAt(E obj,int index) | 將指定元素插入到指定位置 |
public boolean removeElement(Object obj) | 從此向量中移除第一個匹配項 |
public void remove AllElements() | 從此向量中移除全部元素,並將其大小設定為零 |
public Object[] toArray() | 返回一個陣列,包含此向量中以正確順序存放的所有元素 |
3、Stack堆疊
堆疊是一種“後進先出”的資料結構,只能在一端進行輸入或輸出資料的操作。java.util.Stack類繼承了Vector類,對應資料結構中以“後進先出”方式儲存和運算元據的線性表,即物件棧。
方法宣告 | 方法功能 |
pubic Stack() | 建立一個空Stack |
pubic Object push(E item) | 把項壓入棧頂 |
public Object pop() | 移除棧頂元素 |
public Object peek() | 檢視棧頂元素 |
public boolean empty() | 判斷棧是否為空 |
public int search(Object o) | 返回物件在棧中的位置,以1為基數 |
4、LinkedList佇列
LinkedList實現的是一個雙向連結串列。每個節點除含有元素外,還包含向前、向後的指標。在連結串列結構中,每個元素都擁有兩個指標屬性,一個是指向上一個元素的previous指標,一個是指向下一個元素的next指標,第一個元素的previous指標指向“空”,最後一個元素的next指標指向“空”。增加結點,只會對連結串列的指標進行操作,速度快。LinkedList有雙向佇列的特徵,在連結串列兩端可增刪資料。使用index查詢物件時,會以index和size/2比較,從前或從後向中間搜尋。
比較ArrayList和LinkedList的結構,可以得到以下結論。
ArrayList的remove和add(index,Object)操作代價高,需要移動後面的每個元素。
LinkedList採用連結串列資料結構實現,便於元素的插入和刪除,它的get(index)操作代價高,要先迴圈遍歷list找到Object
相關文章
- Set介面及其實現類
- Map類及其主要的實現類
- BlockingQueue介面及其實現類的原始碼分析BloC原始碼
- JAVA--set介面及其實現類的使用Java
- TypeScript 類實現介面TypeScript
- delphi 判斷類是否實現介面,獲取類實現的介面
- 簡單的list介面和edit介面使用java swing實現Java
- python 介面實現類的Python
- java中介面多個實現類,如何指定實現類,根據子類型別選擇實現方法Java型別
- Collection集合、List集合及其方法
- PHP FFI 實現listPHP
- Java集合為什麼設計為:實現類繼承了抽象類,同時實現抽象類實現的介面Java繼承抽象
- C#中介面的顯式實現與隱式實現及其相關應用案例C#
- 介面是否可繼承(extends)介面? 抽象類是否可實現 (implements)介面? 抽象類是否可繼承具體類(concrete class)?繼承抽象
- JAVA 將介面的引用指向實現類的物件Java物件
- Andriod 實現一個類微信聊天介面 (二)
- java 一個類實現兩個介面的案例Java
- Map轉實體類或List陣列陣列
- 線性表及其實現
- AOP如何實現及其原理
- 分散式鎖及其實現分散式
- 字首樹及其Java實現Java
- Mapper 介面並沒有實現類,它是如何工作的?APP
- visual studio 使用技巧 1:快速找到介面的實現類
- 夯實Java基礎系列8:深入理解Java內部類及其實現原理Java
- 夯實Java基礎系列18:深入理解Java內部類及其實現原理Java
- 從java內建類和自定義類比較Comparable介面和Comparator介面實現排序的不同Java排序
- List,Set,Queue,Map介面
- Android開發 - (介面卡)Adapter類中BaseAdapter實現類詳細解析AndroidAPT
- Android開發 - (介面卡)Adapter類中SimpleAdapter實現類詳細解析AndroidAPT
- SpringSecurity許可權管理系統實戰—三、主要頁面及介面實現SpringGse
- 字典樹及其C++實現C++
- Bloom實現及其數學分析OOM
- ProgressBar及其子類
- 為什麼MyBatis的Mpper介面不需要實現類?MyBatis
- 第 9 篇:實現分類、標籤、歸檔日期介面
- 吳恩達《Machine Learning》精煉筆記 8:聚類 KMeans 及其 Python實現吳恩達Mac筆記聚類Python
- Greys主要實現原理