日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java liste_内功心法 -- java.util.ArrayListE (1)

發布時間:2025/3/15 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java liste_内功心法 -- java.util.ArrayListE (1) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

寫在前面的話:讀書破萬卷,編碼如有神

--------------------------------------------------------------------

下文主要對java.util.ArrayList進行整體性介紹,主要內容包括:

1、 ArrayList概述

2、 ArrayList中的屬性、構造方法、常用方法介紹

3、 ArrayList遍歷

參考內容:

1、JDK源碼(1.7)

--------------------------------------------------------------------

1. ArrayList概述

java.util.ArrayList是一個什么玩意,它有什么功能,我們拿ArrayList能夠干嘛?

簡單點說:java.util.ArrayList是一個列表類,它是用來存放其他Java對象,內部是通過數組來實現的。

先看下面的圖(簡略圖):

(1)java.util.ArrayList 是一個列表,用來存放其它java對象的,只要是java對象就可以往ArrayList里面放

(2)java.util.ArrayList內部是通過數組來實現的:

當數組容量不夠的時候,會對數組容量進行擴容

可以通過數組下標來快速的訪問ArrayList里面的元素

當新增或者刪除ArrayList里面的元素時,可能會涉及到移位操作

可以截取數組的子數組操作

java.util.ArrayList的定義如下:

1 public class ArrayList extends AbstractList

2 implements List, RandomAccess, Cloneable, java.io.Serializable{3 //fields4

5 //constructor6

7 //methods8

9 //inner class 'Itr'10

11 //inner class 'ListItr'12

13 //inner class 'SubList'

14 }

從ArrayList類的定義中可以看到,它好復雜喲,定義了那么多的東西,又有父類,又實現了接口等等,這都要怪它的'祖宗',定義了那么多的規范、規則。(@_@)

好了,不多廢話,擼起袖子繼續干:

下面來看看一副圖:

2. ArrayList中的屬性、構造方法、常用方法介紹

先來對java.util.ArrayList的描述進行一些約定:

下面文中的:

'列表'代表ArrayList內部的Object[] elementData數組

'列表大小'代表ArrayList內部的Object[] elementData數組的長度

'元素'代表往ArrayList中添加的Java對象

2.1 java.util.ArrayList的常見屬性

1 //序列號

2 private static final long serialVersionUID = 8683452581122892189L;3 //ArrayList實際存儲元素的地方

4 private transientObject[] elementData;5 //ArrayList中存儲的元素個數

6 private intsize;7 //ArrayList最多存儲元素的個數

8 private static final int MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8;9 //fast-fail失敗機制標記

10 protected transient int modCount = 0;

2.2?java.util.ArrayList的構造方法

第一種:默認構造方法(無參數構造方法)

1 publicArrayList()

第二種: 帶初始列表容量大小參數的構造方法

1 public ArrayList(intinitialCapacity)

第三種:帶初始化子列表參數的構造方法

1 public ArrayList(Collection extends E>c)

2.3?java.util.ArrayList的常用方法

修改操作

boolean add(E e)

將指定的元素添加到此列表的尾部

void add(int index,E element)

將指定的元素插入此列表中的指定位置

E remove(int index)

移除此列表中指定位置上的元素

boolean remove(Object o)

移除此列表中首次出現的指定元素

E set(int index,E element)

用指定的元素替代此列表中指定位置上的元素

批量操作

boolean addAll(Collection extends E> c)

將子集合c中的元素添加到此集合中

boolean addAll(int index,Collection extends E> c)

將子集合c中的元素添加到此集合中的index位置開始處

void clear()

清空此集合

protected void removeRange(int fromIndex,int toIndex)

移除集合中索引在fromIndex(包括)和toIndex(不包括)之間的所有元素

public boolean removeAll(Collection> c)

移除此collection中那些也包含在指定collection中的所有元素

public boolean retainAll(Collection> c)

僅保留在子集合c中那些也包含在此集合中的元素

查詢操作

boolean contains(Object o)

判斷集合中是否包含了元素o

E get(int index)

返回此集合中index位置上的元素

int indexOf(Object o)

返回此集合中首次出現元素o的位置

boolean isEmpty()

判斷此集合是否為空

int lastIndexOf(Object o)

返回此集合中最后一次出現元素o的位置

int size()

返回此集合中元素的個數

其他操作

Object clone()

返回此列表實例的淺復制

void ensureCapaCity(int minCapacity)

如有必要,增加此列表實例的容量,以確保它至少能夠容納最小容量參數所指定的元素數

void trimToSize()

將此列表實例的容量調整為列表的當前大小

數組操作

Object[] toArray()

按適當順序返回包含此列表中所有元素的數組

T[] toArray(T[] a)

按適當順序返回包含此列表中所有元素的數組

Iterator和子List操作

ListIterator listIterator(int index)

返回列表的ListIterator實例

ListIterator listIterator()

返回列表的ListIterator實例

Iterator iterator()

返回列表的Iterator實例

List subList(int fromIndex, int toIndex)

返回列表的子列表

----------------------------------------------------------------------------------------

3. ArrayList遍歷方法

java.util.ArrayList支持三種遍歷方式:

第一種: 通過索引值去遍歷(隨機遍歷)

第三種: 通過增強的for循環去遍歷

第三種: 通過迭代器去遍歷

下面就來看看三種遍歷方式的示例代碼和遍歷的效率比較:

1 importjava.util.ArrayList;2 importjava.util.Iterator;3 importjava.util.List;4

5

6 public classArrayListAccessDemo {7 /**

8 * 通過索引值去遍歷(隨機訪問)9 */

10 public static void accessByIndex(Listlist){11 long beginTime =System.currentTimeMillis();12 for(int i = 0;i < list.size();i++){13 list.get(i);14 }15 long endTime =System.currentTimeMillis();16 long totalTime = endTime -beginTime;17 System.out.println("通過索引值去遍歷(隨機訪問) 花費的時間:" + totalTime+" 毫秒");18

19 }20

21 /**

22 * 通過增強的for循環去遍歷23 */

24 public static void accessByFor(Listlist){25 long beginTime =System.currentTimeMillis();26 for(Integer i : list){27 list.get(i);28 }29 long endTime =System.currentTimeMillis();30 long totalTime = endTime -beginTime;31 System.out.println("通過增強的for循環去遍歷 花費的時間:" + totalTime+" 毫秒");32

33 }34

35 /**

36 * 通過Iterator迭代器去遍歷37 */

38 public static void accessByIterator(Listlist){39 long beginTime =System.currentTimeMillis();40 Iterator it =list.iterator();41 while(it.hasNext()){42 it.next();43 }44 long endTime =System.currentTimeMillis();45 long totalTime = endTime -beginTime;46 System.out.println("通過Iterator迭代器去遍歷 花費的時間:" + totalTime+" 毫秒");47

48 }49

50 public static voidmain(String[] args) {51 //創建一個ArrayList實例

52 List list = new ArrayList();53 //往ArrayList實例中添加數據

54 for(int i = 0;i < 10000000;i++){55 list.add(i);56 }57

58 accessByIndex(list);59 accessByFor(list);60 accessByIterator(list);61 }62 }63

64 運行結果:65 ArrayList中有100W條數據時:66 通過索引值去遍歷(隨機訪問) 花費的時間:2毫秒67 通過增強的for循環去遍歷 花費的時間:9毫秒68 通過Iterator迭代器去遍歷 花費的時間:4毫秒69

70 ArrayList中有500W條數據時:71 通過索引值去遍歷(隨機訪問) 花費的時間:4毫秒72 通過增強的for循環去遍歷 花費的時間:20毫秒73 通過Iterator迭代器去遍歷 花費的時間:9毫秒74

75 ArrayList中有1000W條數據時:76 通過索引值去遍歷(隨機訪問) 花費的時間:3毫秒77 通過增強的for循環去遍歷 花費的時間:32毫秒78 通過Iterator迭代器去遍歷 花費的時間:13毫秒79

80 ArrayList中有5000W條數據時:81 通過索引值去遍歷(隨機訪問) 花費的時間:3毫秒82 通過增強的for循環去遍歷 花費的時間:118毫秒83 通過Iterator迭代器去遍歷 花費的時間:55 毫秒

View Code

----------------------------------------------------------------------------------------

java.util.ArrayList系列文章

相關知識

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java liste_内功心法 -- java.util.ArrayListE (1)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。