[英]Add element in an ArrayList efficiently at a given index in java
我需要在索引i的ArrayList中插入Person類型的元素(我自己定義的類)
我知道我可以使用add(int index, E element)
。
但是有沒有任何有效的方法來做到這一點,因為在我的列表中平均花費大約1.5毫秒(收集的數據超過1000插入,然后平均)。
如果您的任務是更多插入/刪除密集,您可以始終使用java.util.LinkedList 。
對於LinkedList
:
對於ArrayList
:
這種插入發生在O(n)中,因為它必須將所有元素向下移動,而在最壞情況下它會將每個元素向下移動。 (更正了java說它是O(n),因為它們使用數學公式來插入)
如果你想快速插入,可以在arraylist的末尾添加它,或者使用一個恆定時間的hashmap。
插入hashmap:HashMap peopleMap = new Hashmap .....
peopleMap.put(person.name,person); //(或任何你想跟蹤的)
這為人名和人的價值設定了關鍵。
您還可以嘗試使用密鑰(您想要跟蹤的密碼)的哈希映射,並為該人在持有者數組中的索引值。 插入是O(i),查找O(i),你也可以對它進行排序(我將把它作為練習留給讀者)
如果這個的整個目的是排序,那么為了簡單起見,你可以插入一個priorityQueue(nLogn),然后將所有內容彈出到數組中,這將為你提供一個排序數組
如果你添加使用
arryListInstance.add(positionIndex, Object);
在將現有對象篩選1個位置后添加對象。 . 因此,該操作的平均情況變為 。
雖然簡單添加
arryListInstance.add(positionIndex, Object);
在arrayListInstance的末尾添加對象。 , but at it's worst case it becomes when the maximum capacity is reached: as a new ArrayList instance is created internally and all the contents are copied there. 在最好的情況下,此操作是 ,但在最壞的情況下,當達到最大容量時它變為 :因為在內部創建了新的ArrayList實例並且在那里復制了所有內容。
您正面臨這個問題,因為可以避免第一個的兩個原因之一:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.