java list 接口_Java 集合 List接口
[TOC]
List接口
概述有序的 collection(也稱為序列)。此接口的用戶可以對列表中每個元素的插入位置進行精確地控制。用戶可以根據元素的整數索引(在列表中的位置)訪問元素,并搜索列表中的元素。
Collection將集合劃分為兩大類:List集合
Set集合
List接口的特點有序【存儲有序】
可重復
可以存儲 null值
部分子集合線程安全,部分不安全 例如 ArrayList 和 Vector
有索引,針對每個元素能夠方便地查詢和修改
判斷元素是否重復依賴于equals方法
? a. 如果元素是系統類,不需要重寫equals方法
? b. 如果是自定義類,就需要我們按需求重寫 equals方法
List接口的常用方法
增
void add(int index, E element) 在指定 index 索引處理插入元素 element
boolean addAll(int index, Collection extends E> c) 在指定 index 索引處理插入集合元素 c
刪除
E remove(int index) 刪除指定索引 index 處的元素
修改
E set(int index, E element) 修改指定索引 index 處的元素為 element
遍歷
E get(int index) + int size() for循環遍歷集合中的每一個元素 ListIterator listIterator() 通過列表迭代器遍歷集合中的每一個元素 ListIterator listIterator(int index) 通過列表迭代器從指定索引處開始正向或者逆向遍歷集合中的元素
獲取
E get(int index) 獲取指定索引處的元素 int indexOf(Object o) 從左往右查找,獲取指定元素在集合中的索引,如果元素不存在返回 -1 int lastIndexOf(Object o) 從右往左查找,獲取指定元素在集合中的索引,如果元素不存在返回 -1 List subList(int fromIndex, int toIndex) 截取從 fromIndex 開始到 toIndex-1 處的元素
List接口的遍歷方式toArray
Iterator
foreach
普通for
ListIterator
List接口去除重復元素
? 方式一:創建一個新的集合去除重復元素再使用地址傳遞
? 方式二:在原集合的基礎上使用選擇排序思想去除重復元素
并發修改異常的處理
異常名稱:并發修改異常 java.util.ConcurrentModificationException
產生原因:在使用迭代器迭代的同時使用原集合對元素做了修改
解決辦法:使用 toArray 方法
使用 普通 for 遍歷
使用 ListIterator 遍歷集合并且使用 列表迭代器修改元素
Set
Set接口的特點:
1.無序 【存儲無序】
2.唯一
3.可以存儲null值,但是null不能重復
ArrayList
概述List 接口的大小可變數組的實現。實現了所有可選列表操作,并允許包括 null 在內的所有元素。除了實現 List 接口外,此類還提供一些方法來操作內部用來存儲列表的數組的大小。(此類大致上等同于 Vector類,除了此類是不同步的。)
特點底層數據結構是數組
增加和刪除的效率低,查詢和修改的效率高
能夠存儲 null 值
線程不安全,效率高 可以通過 Collections.synchronizedList();變安全
有索引,能夠方便檢索
元素可重復,我們自己可以通過 選擇排序去重復
不可以排序,但是可以通過 Collections.sort();方法排序
注:ArrayList中常用的方法全部來自于 父類 Collection,List,Object.這里不再做詳細敘述。
Vector
概述Vector 類可以實現可增長的對象數組。與數組一樣,它包含可以使用整數索引進行訪問的組件。但是,Vector 的大小可以根據需要增大或縮小,以適應創建 Vector 后進行添加或移除項的操作。
特點底層數據結構是數組
有索引,能夠方便檢索
增加和刪除的效率低,查詢和修改的效率高
線程安全,效率低
能夠存儲 null 值
元素可重復【我們自己可以通過選擇排序思想去除重復元素】
不可以排序,但是可以通過 Collections.sort();方法排序
常用方法
增加
public synchronized void addElement(E obj) 添加元素 obj 到集合中 public synchronized void insertElementAt(E obj, int index) 在指定索引 index 處插入元素 obj
刪除
public synchronized void removeElementAt(int index) 移除指定索引 index 處的元素 public synchronized void removeAllElements() 移除所有元素
修改
public synchronized void setElementAt(E obj, int index) 修改指定索引 index 的元素為 obj
遍歷
public synchronized E elementAt(int index) + size() for循環遍歷集合中的所有元素 public synchronized Enumeration elements() 使用 Enumeration 迭代器遍歷集合中的元素
獲取
public synchronized E firstElement() 獲取集合中的第一個元素 public synchronized E lastElement() 獲取集合中的最后一個元素 public synchronized E elementAt(int index) 獲取指定索引 index 的元素
相關面試題
ArrayList和Vector的區別? 1) Vector的方法都是同步的(Synchronized),是線程安全的(thread-safe),而ArrayList的方法不是,由于線程的同步必然要影響性能,因此,ArrayList的性能比Vector好。
2) 當Vector或ArrayList中的元素超過它的初始大小時,Vector會將它的容量翻倍,而ArrayList只增加50%的大小,這樣,ArrayList就有利于節約內存空間。
Stack
概述Stack 類表示后進先出(LIFO)的對象堆棧。它通過五個操作對類 Vector 進行了擴展 ,允許將向量視為堆棧。它提供了通常的 push 和 pop 操作,以及取堆棧頂點的 peek 方法、測試堆棧是否為空的 empty 方法、在堆棧中查找項并確定到堆棧頂距離的 search 方法。
特點基于棧結構的集合,先進后出
Stack 類是 Vector類的子類,所以該類也是線程安全的,效率低,建議使用 Deque接口的實現類
常用方法
E push(E item) 將元素壓入棧底 E pop() 將元素從棧結構中彈出,并作為此函數的值返回該對象,此方法會影響棧結構的大小 E peek() 查看堆棧頂部的對象,但不從棧中移除它。 boolean empty() 測試棧是否為空。 int search(Object o) 返回對象在棧中的位置,以 1 為基數。
注:如果棧中元素為空,再嘗試彈棧,將會拋出 EmptyStackException 異常, 而不是 NoSuchElementException
Queue
概述在處理元素前用于保存元素的 collection。除了基本的 null 或 false,具體取決于操作)。插入操作的后一種形式是用于專門為有容量限制的 Queue 實現設計的;在大多數實現中,插入操作不會失敗。
特點該接口是隊列接口的根接口,先進先出
該接口提供隊列相關兩種形式的方法,一種拋出異常(操作失敗時),另一種返回一個特殊值(null 或 false,具體取決于操作)。插入操作的后一種形式是用于專門為有容量限制的 Queue 實現設計的;在大多數實現中,插入操作不會失敗。
常用方法
| | 拋出異常 | 返回特殊值 | | ---- | --------- | ---------- | | 插入 | add(e) | offer(e) | | 移除 | remove() | poll() | | 檢查 | element() | peek() |
總結
以上是生活随笔為你收集整理的java list 接口_Java 集合 List接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝返利网怎么返利?
- 下一篇: win10输入法禁用ime怎么办 win