国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java基礎_集合類_List

這篇具有很好參考價值的文章主要介紹了Java基礎_集合類_List。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Collection、List接口

1、繼承結(jié)構(gòu)

Java基礎_集合類_List,Java,java,list,開發(fā)語言

2、方法

Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言

Java基礎_集合類_List,Java,java,list,開發(fā)語言

Collection實現(xiàn)類

1、繼承結(jié)構(gòu)

Java基礎_集合類_List,Java,java,list,開發(fā)語言
類圖:
Java基礎_集合類_List,Java,java,list,開發(fā)語言

2、相關類

(1)AbstractCollection

Collection接口的骨架式實現(xiàn)類,最小化實現(xiàn)Collection接口的代價。

(2)AbstractList

List接口的骨架式實現(xiàn)類,最小化實現(xiàn)List接口的代價。**“隨機訪問”**數(shù)據(jù)存儲。

提供了iterator()、listIterator()方法的實現(xiàn)。

重要屬性
protected transient int modCount;【修改次數(shù),迭代器和列表迭代器使用】
如果該字段的值發(fā)生意外變化,迭代器(或列表迭代器)將拋出ConcurrentModificationException,以響應next、remove、previous、set、add操作。這提供了快速故障行為,而不是在迭代期間面對并發(fā)修改時的不確定性行為。

AbstractSequentialList(子類)

List接口的框架實現(xiàn),**“順序訪問”**數(shù)據(jù)存儲。

其它接口

RandomAccess【java.util】

Java基礎_集合類_List,Java,java,list,開發(fā)語言
List實現(xiàn)使用的標記接口,表明它們支持快速隨機訪問(通常是常量時間)。

該接口的主要目的是允許泛型算法改變其行為,以便在應用于隨機或順序訪問列表時提供良好的性能。

操作隨機訪問列表(如ArrayList)的最佳算法在應用于順序訪問列表(如LinkedList)時可以產(chǎn)生二次行為。鼓勵泛型列表算法在應用算法之前檢查給定列表是否是該接口的實例。

Cloneable【java.lang】

標記接口。
一個類實現(xiàn)了Cloneable接口,表明調(diào)用Object.clone()方法對該類的實例進行逐個字段的復制是合法的。在沒有實現(xiàn)Cloneable接口的實例上調(diào)用Object的clone方法將導致拋出CloneNotSupportedException異常。

按照約定,實現(xiàn)這個接口的類應該重寫Object.clone()方法,表明是public,而Object.clone()方法是protected

這個接口不包含clone方法。因此,不可能僅僅因為對象實現(xiàn)了這個接口就克隆它。即使以反射方式調(diào)用clone方法,也不能保證它一定會成功。

Serializable【java.io】

標記接口。Serializable接口沒有方法或字段,僅用于標識可序列化的語義。

具體實現(xiàn)類

1、Vector

Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言

  • 可增長的對象數(shù)組,使用索引訪問:capacity、capacityIncremnt

Stack

繼承自Vector類,擴展Vector類實現(xiàn)LIFO功能:

  • push、pop
  • peek
  • search
  • empty

LIFO功能:
Java基礎_集合類_List,Java,java,list,開發(fā)語言

2、ArrayList

Java基礎_集合類_List,Java,java,list,開發(fā)語言
List接口的可調(diào)整數(shù)組實現(xiàn)。

不同步

  • Collections.synchronizedList(new ArrayList(…));

實現(xiàn)所有可選列表操作,并允許所有元素,包括null。除了實現(xiàn)List接口之外,這個類還提供了一些方法來操作內(nèi)部用于存儲列表的數(shù)組的大小。(大致相當于Vector,但不同步。)

  • Cloneable:Object.clone()

  • Iterable:forEach(Consumer<? super E> action)

  • Collection:removeIf(Predicate<? super E> filter)

  • AbstractList:removeRange(int fromIndex, int toIndex)

  • 增加方法:

    • ensureCapacity(int minCapacity)
    • trimToSize()
      時間復雜度:
  • size、isEmpty、get、set、iterator和listIterator操作在常量時間內(nèi)運行。

  • add在平攤常數(shù)時間內(nèi)運行,即添加n個元素需要O(n)時間。

  • 所有其他操作都在線性時間內(nèi)運行(粗略地說)。

與LinkedList實現(xiàn)相比,常數(shù)因子較低。

每個ArrayList實例都有一個capacity,用于存儲列表中元素的數(shù)組的大小。它總是至少和列表大小一樣大。當元素被添加到ArrayList中時,它的容量會自動增長。
在添加大量元素之前使用ensureCapacity操作來增加ArrayList實例的容量。這可能會減少增量再分配的數(shù)量。

分析源碼
(1)構(gòu)造函數(shù)

//存儲數(shù)據(jù):Object數(shù)組elementData

//構(gòu)造函數(shù)(空參):賦值空數(shù)組
public ArrayList() {
	this.elementData = DEFAULTCAPACITY_EMPTY_ELEMENTDATA;
}

/*構(gòu)造函數(shù)(含參:容器大?。?	判斷initialCapacity > 0:創(chuàng)建對應大小的一個Object數(shù)組;
	= 0 :賦值一個空數(shù)組
*/
public ArrayList(int initialCapacity) {
	if (initialCapacity > 0) {
		this.elementData = new Object[initialCapacity];
	} else if (initialCapacity == 0) {
		// 空數(shù)組
		this.elementData = EMPTY_ELEMENTDATA;
	} else {
	throw new IllegalArgumentException("Illegal Capacity: "+                                         initialCapacity);
	}
}

/*構(gòu)造函數(shù)(使用集合Collection的子類對象)
*/
public ArrayList(Collection<? extends E> c) {
	//將參數(shù)轉(zhuǎn)換成數(shù)組
	Object[] a = c.toArray();
	//數(shù)組長度不為0
	//參數(shù)類型判斷:ArrayList直接賦值;Arrays.copyOf()方法拷貝
	if ((size = a.length) != 0) {
		if (c.getClass() == ArrayList.class) {
			elementData = a;
		} else {
			elementData = Arrays.copyOf(a, size, Object[].class);
		}
	} else {
		//轉(zhuǎn)換的數(shù)組長度為0:賦值空數(shù)組 
		elementData = EMPTY_ELEMENTDATA;
	}
}

(2)數(shù)組大小擴展

	// 減少不必要的空間消耗
	public void trimToSize() {
		//處理數(shù)++
		modCount++;
		//容器中元素個數(shù) VS 存儲數(shù)據(jù)數(shù)組長度 
		if (size < elementData.length) {
			//容器空 ? 空數(shù)組 : Arrays.copyOf()
			elementData = (size == 0)? EMPTY_ELEMENTDATA: Arrays.copyOf(elementData, size);
		}
	}


	
	public void ensureCapacity(int minCapacity) {
		//minCapacity>底層數(shù)組長度【需要擴容】
		//!(底層數(shù)組不空 && minCapacity<=10)【底層數(shù)組空:第一次】
		if (minCapacity > elementData.length&& !(elementData == DEFAULTCAPACITY_EMPTY_ELEMENTDATA && minCapacity <= DEFAULT_CAPACITY)) {
			//操作數(shù)++
			modCount++;
			//增加
			grow(minCapacity);
		}
	}

    private Object[] grow(int minCapacity) {
        int oldCapacity = elementData.length;
        if (oldCapacity > 0 || elementData != DEFAULTCAPACITY_EMPTY_ELEMENTDATA) {
            int newCapacity = ArraysSupport.newLength(oldCapacity,
                    minCapacity - oldCapacity, /* minimum growth */
                    oldCapacity >> 1           /* preferred growth */);
            return elementData = Arrays.copyOf(elementData, newCapacity);
        } else {
            return elementData = new Object[Math.max(DEFAULT_CAPACITY, minCapacity)];
        }
    }

    private Object[] grow() {
        return grow(size + 1);
    }

(3)代碼

ArrayList<String> al = new ArrayList<>();
al.add("hello");

構(gòu)造函數(shù):創(chuàng)建一個空數(shù)組
Java基礎_集合類_List,Java,java,list,開發(fā)語言
add()方法:【底層:空數(shù)組】=>擴容到長度為DEFAULT_CAPACITY(10)的數(shù)組
Java基礎_集合類_List,Java,java,list,開發(fā)語言
假設當前底層數(shù)組中已經(jīng)添加了10個元素,現(xiàn)在繼續(xù)調(diào)用add()添加一個元素:數(shù)組擴容1.5倍
Java基礎_集合類_List,Java,java,list,開發(fā)語言

3、LinkedList

Java基礎_集合類_List,Java,java,list,開發(fā)語言

Deque接口(子接口)

Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言

Queue接口(父接口)

Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言

源碼分析

(1)雙向鏈表

    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;
        }
    }

	transient int size = 0;

    transient Node<E> first;

    transient Node<E> last;

	//構(gòu)造函數(shù)
	public LinkedList() {}

(2)add方法

	public boolean add(E e) {
        linkLast(e);
        return true;
    }
    
    void linkLast(E e) {
        final Node<E> l = last;
        final Node<E> newNode = new Node<>(l, e, null);
        last = newNode;
        if (l == null)
            first = newNode;
        else
            l.next = newNode;
        size++;
        modCount++;
    }

Java基礎_集合類_List,Java,java,list,開發(fā)語言

4、CopyOnWriteArrayList【COW并發(fā)容器,寫時復制容器<讀寫分離>】

Java基礎_集合類_List,Java,java,list,開發(fā)語言
Java基礎_集合類_List,Java,java,list,開發(fā)語言

底層:Object數(shù)組
Java基礎_集合類_List,Java,java,list,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-860772.html

到了這里,關于Java基礎_集合類_List的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Java基礎】Java8 使用 stream().filter()過濾List對象(查找符合條件的對象集合)

    【Java基礎】Java8 使用 stream().filter()過濾List對象(查找符合條件的對象集合)

    本篇主要說明在Java8及以上版本中,使用stream().filter()來過濾List對象,查找符合條件的集合。 集合對象以學生類(Student)為例,有學生的基本信息,包括:姓名,性別,年齡,身高,生日幾項。 我的學生類代碼如下: 下面來添加一些測試用的數(shù)據(jù),代碼如下: 添加過濾條件

    2024年02月12日
    瀏覽(96)
  • 【Java基礎教程】(四十八)集合體系篇 · 上:全面解析 Collection、List、Set常用子接口及集合元素迭代遍歷方式~【文末送書】

    【Java基礎教程】(四十八)集合體系篇 · 上:全面解析 Collection、List、Set常用子接口及集合元素迭代遍歷方式~【文末送書】

    掌握 Java 設置類集的主要目的以及核心接口的使用; 掌握 Collection 接口的作用及主要操作方法; 掌握 Collection 子接口 List、Set 的區(qū)別及常用子類的使用; 掌握 Map 接口的定義及使用; 掌握集合的4種輸出操作語法結(jié)構(gòu); 掌握 Properties類的使用 ; 了解類集工具類 Collections 的作

    2024年02月15日
    瀏覽(58)
  • Java List對象集合轉(zhuǎn)Json & Json轉(zhuǎn)List對象集合

    使用了阿里巴巴的 fastjson ?首先引入依賴 示例如下 輸出結(jié)果:

    2024年02月15日
    瀏覽(18)
  • Java集合-List

    Java集合-List

    java.util.List 接口繼承自Collection接口,是單列集合的一個重要分支,習慣性地會將實現(xiàn)了List接口的對象稱為List集合,在List集合中允許出現(xiàn)重復的元素,所有的元素是以一種線性方式進行存儲的,在程序中可以通過索引來訪問集合中的指定元素,另外List集合還有一個特點就是

    2024年02月13日
    瀏覽(26)
  • Java List集合

    List系列集合:添加的元素是有序,可重復,有索引 ArrayList : 添加的元素是有序,可重復,有索引 LinkedList : 添加的元素是有序,可重復,有索引 Vector :是線程安全的,速度慢,開發(fā)中很少使用 6.1 List集合概述和特點 List集合概述 1、有序集合(也稱為序列),用戶可以精確控制

    2024年02月06日
    瀏覽(25)
  • Java 集合 - List 接口

    Java 集合 - List 接口

    在 Java 中, java.util.List 接口是 Java 集合框架中的一個接口,它繼承自 Collection 接口,是單列集合的一個重要分支。List 接口的常見實現(xiàn)類包括 ArrayList 、 LinkedList 和 Vector 。 List 接口特點如下: 有序性 : List 中的元素是按照插入順序排序的,因此可以很容易地遍歷 List 中的元

    2024年02月07日
    瀏覽(19)
  • Java集合之List

    Java集合之List

    ①.add(Object element) 向列表的尾部添加指定的元素。 ②.size() 返回列表中的元素個數(shù)。 ③.get(int index) 返回列表中指定位置的元素,index從0開始。 ?④.add(int index, Object element) 在列表的指定位置(從0開始)插入指定元素 ⑤.set(int i, Object element) 使用元素element替換索引i位置的元素

    2024年02月15日
    瀏覽(13)
  • Java集合框架List接口

    目錄 List接口概念 List接口常用的方法 示例 Java集合框架中的List接口是一種有序的集合,它可以存儲重復的元素。它是Collection接口的子接口,提供了一系列可以對列表進行操作的方法,如添加、插入、刪除、獲取元素等。List接口還可以通過索引訪問元素,類似于數(shù)組。 List接

    2023年04月17日
    瀏覽(22)
  • java List集合去除null

    方法一:使用迭代器進行遍歷和刪除 方法二:使用 Java 8 的 Stream 進行過濾 方法三:使用Java8 Collecttion的removeIf() 方法,arraylist.removeIf(PredicateE filter) ?方法四:使用 Apache Commons Collections 庫,其中的? CollectionUtils ?類提供了? removeNull ?方法,可以方便地從集合中刪除 null 元素。

    2024年02月11日
    瀏覽(20)
  • Java 中 List 集合排序方法

    注:Collections的sort方法其實是調(diào)用了List接口自己的sort方法。 首先你需要list.parallelStream().sorted 進行流處理,使用parallelStream可以充分調(diào)度多核CPU。 使用Comparator.comparing進行排序,reversed()進行倒序排列,thenComparing進行下一個排序。 Comparator.comparing()里面的內(nèi)容,也是就是Obje

    2024年02月12日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包