簡體   English   中英

Java ArrayList實現

[英]Java ArrayList implementation

我一直在嘗試比較列表的定義及其在Java中的實現,因為我覺得存在不匹配。

List DataStructure的定義 :列表或序列是實現有序值集合的抽象數據類型,其中相同的值可能出現多次。 [摘自: http//en.wikipedia.org/wiki/List_(abstract_data_type) ]

現在,有序集合維護元素的插入順序。

List的Java實現 - > ArrayList :根據這個實現,我有以下幾點:

  1. 如果我初始化一個大小為5的ArrayList ,那么我不能直接在第5個位置插入元素而不在位置1,2,3,4處插入元素,因為它將違反排序原則。 所以Java在這里給出了異常,我完全贊同。
  2. ArrayList提供類似“set(int index,E element)”和“add(int index,E element)”的方法,使用它們可以替換列表中間的元素,也可以在列表中間插入新元素。 我不明白。 由於不維持插入順序,這違反了訂購原則。

我覺得第一點和第二點是相互沖突的,第二點是違反訂購原則,或者可能是我遺漏了一些東西。

有人可以在我對List理解中解釋我的錯誤嗎?

  1. 該定義沒有說明列表的大小或者按索引添加元素時會發生什么。 它只是說元素的順序不會“突然”改變。

    這與“set”類型形成對比,其中元素的順序可以通過添加新元素來改變。 如果在5元素列表的第2個位置插入元素,則第3個元素不會突然跳轉到列表的頭部。

  2. 該定義也沒有說明哪些操作必須具有,只能說它可能具有的操作。 為了有效地對列表進行操作,有一個方法可以在任何地方插入元素(當然具有合法的邊界), 並且能夠在不改變現有元素索引的情況下替換元素。

    如果缺少第二個操作,則替換元素將采用add() plus remove() ,這兩個操作都是昂貴的,具體取決於實現。

    此外,這兩個操作都清楚地解釋了它們在應用時如何影響其他元素的排序。 set()不會更改其他元素的順序,而add()增加插入點之后所有元素的索引。

ordered collection of values並不意味着插入順序。 這意味着有一堆物品一個接一個地放在某處,你可以按順序訪問它們。

能夠在特定索引處插入項目使您可以控制訂單。

Arraylist有一個訂單,這就是它的意思。 如果你在某處插入一個值,它仍然有一個AN訂單,即使它看起來很傻。 如果您想要一個有意義的訂單,那么您必須查看類似的接口。

與任何java.util.ListArrayList維護元素的插入順序。

假設我們有一個空的ArrayList 我們添加A,然后是B,然后是C.列表如下: [A, B, C] 不是[C, A, B]也不是[A, C, B] 現在,如果我們在索引1處插入D,則列表將如下所示: [A, D, B, C] 不是[A, B, C, D]或其他任何東西,這對於其他類型的Collection可能是完全可能的。

Java的List既不暗示人工元素排序,如Sorted集合,也不暗示隨機元素排序,如某些集合,如HashSet等。

您可以將元素O添加到像XXXXXXX這樣的列表中。 使用添加的元素,您有XXXXXXO

如果您嘗試在大於列表大小的位置添加元素,則會出現像XXXXXX O這樣的漏洞。

add(position,element)用於添加列表中的元素,如add(2,O) - > XXXOXX

List不是可能位置的字段,如數組而是集合。

正如您所知ArrayList不保持順序並具有隨機的get / set方法。 這是對的。

我會說維基定義是錯誤的,不完全正確,或者不適用於Java在List下理解的內容,這顯然比Ordered List少一點

如果要在插入時進行排序,Java SE API會提供TreeSet ,您必須在創建時向其提供Comparator ,或者插入元素時實現Comparable接口。 否則,元素按其自然順序排序。

在我看來,Java的ArrayList只是一個托管數組,非常方便,適合大多數用例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM