日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

List接口的常用方法以及ArrayList/LinkedList源码分析

發布時間:2025/3/17 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 List接口的常用方法以及ArrayList/LinkedList源码分析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.List接口的常用方法

ArrayList list = new ArrayList();list.add(123);list.add(456);list.add("AA");list.add(new Person("Tom",12));System.out.println(list);//[123, 456, AA, Person{name='Tom', age=12}]

增:add(int index, object ele): 在index位置插入ele元素;

//void add(int index, object ele): 在index位置插入ele元素list.add(1,"BB");System.out.println(list);//[123, BB, 456, AA, Person{name='Tom', age=12}]

刪:remove(int index): 移除指定index位置的元素,并返回此元素;

//object remove(int index): 移除指定index位置的元素,并返回此元素Object obj = list.remove(0);System.out.println(obj);//123,返回刪除的元素System.out.println(list);//[BB, 456, AA, Person{name='Tom', age=12}]

改:set(int index, object ele): 設置指定index位置的元素為ele;

//object set(int index, object ele): 設置指定index位置的元素為elelist.set(1,"CC");System.out.println(list);//[BB, CC, AA, Person{name='Tom', age=12}]

查:get(int index): 獲取指定index位置的元素;

//object get(int index): 獲取指定index位置的元素System.out.println(list.get(1));//BB

插:add(int index, Object ele);
長度:size()
遍歷:①Iterator迭代器方式;
②增強for循環;
③普通for循環(有索引);

//方式一:Iterator迭代器方式:Iterator iterator = list.iterator();while(iterator.hasNext()){System.out.println(iterator.next());}//方式二:增強for循環for(Object obj : list){System.out.println(obj);}//方式三:普通for循環for (int i = 0; i < list.size(); i++) {System.out.println(list.get(i));}

2.ArrayList源碼分析:
2.1 jdk7情況:==》類似餓漢式
ArrayList list = new ArrayList(); //底層創建了長度是10的Object[]數組elementData
List.add(123); //elementData[0] = new Integer(123);

List.add(11); //如果此次添加到底層elementData數組容量不夠,則需要擴容, 默認情況下,擴容為原來容量的1.5倍,同時需要將原有數組中的數據復制到新的數組中。

結論:開發中建議使用帶參的構造器 ArrayList list = new ArrayList(int capacity);

2.2 jdk8中ArrayList的變化 ==》類似懶漢式
ArrayList list = new ArrayList(); //底層Object[] elementData初始化為{},并沒有創建長度為10的數組
List.add(123); //第一次調用add()時,底層才創建了長度為10的數組,并將數據123添加到elementData數組中。
…后續的添加和擴容操作與jdk7同。

2.3 小結:jdk7中的ArrayList的對象的創建類似于單例模式的餓漢式,jdk8中的ArrayList的對象的創建類似于單例模式的懶漢式,延遲了數組的創建,節省內存。

3.LinkedList源碼分析:內部聲明了Node類型的first和last屬性,默認值為null;
list.add(123);//將123封裝到Node中,創建了Node對象;
其中,Node定義如下:體現了LinkedList的雙向鏈表的說明

private static class Node<E> {E item;Node<E> next;Node<E> prev;Node(Node<E> prev, E element, Node<E> next) {this. item = element;this.next = next;this.prev = prev;} }

4.Vector的源碼分析:jdk7和jdk8中通過Vector()構造器創建對象時,底層都創建了長度為10的數組;擴容方面,默認擴容為原來數組長度的2倍。

新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

總結

以上是生活随笔為你收集整理的List接口的常用方法以及ArrayList/LinkedList源码分析的全部內容,希望文章能夠幫你解決所遇到的問題。

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