list
概述及特點:元素有序,並且每乙個元素都存在乙個索引.元素可以重複.
list集合的特有功能概述
void add(int index,e element)
: 在指定索引處新增元素
e remove(int index)
:移除指定索引處的元素 返回的是移除的元素
e get(int index)
:獲取指定索引處的元素
e set(int index,e element)
:更改指定索引處的元素 返回的而是被替換的元素
功能使用和collection
很相似,如何使用可以檢視我前面的一篇部落格
listiterator
繼承自iterator
可以使用iterator
中的方法
listiterator
的特有功能
boolean hasprevious()
: 是否存在前乙個元素
e previous()
: 返回列表中的前乙個元素
以上兩個方法可以實現反向遍歷 但是注意 要完成反向遍歷之前 要先進行正向遍歷 這樣指標才能移到最後
如果直接反向遍歷是沒有效果的 因為指標預設位置就在最前面 他前面沒有元素
concurrentmodificationexception
出現
我們用iterator
這個迭代器遍歷採用hasnext
方法和next
方法,集合修改集合 會出現併發修改異常
原因是我們的迭代依賴於集合 當我們往集合中新增好了元素之後 獲取迭代器 那麼迭代器已經知道了集合的元素個數
這個時候你在遍歷的時候又突然想給 集合裡面加乙個元素(用的是集合的add
方法) 那迭代器不同意並且報錯了
解決方案1 我們用listiterator
迭代器遍歷 用迭代器自帶的add
方法新增元素 那就不會報錯了
解決方案2 使用for
迴圈遍歷集合 新增元素 不會報錯
資料結構概述及常見資料結構:
資料結構其實就是儲存資料的格式
分類:棧,佇列,陣列,鍊錶,樹,雜湊表
棧特點:先進後出
佇列:先進先出
陣列特點: 查詢快 , 增刪慢,因為以陣列型別儲存的資料每個元素都有索引,所以要查詢第幾個的元素很方便,但是刪除就會相對複雜些,因為刪除實際上就是對原來元素的覆蓋,而覆蓋後這裡的索引就會沒用,所以應該如何處理非常麻煩
鍊錶特點: 查詢慢 , 增刪快,因為鍊錶以鏈式來儲存資料,所以要查詢元素必須要將每乙個元素都遍歷一遍,比較麻煩,但是增刪非常方便,直接修改指標就可以實現
list
的三個子類的特點:
arraylist
:
底層資料結構是陣列,查詢快,增刪慢。
執行緒不安全,效率高。
vector
:
底層資料結構是陣列,查詢快,增刪慢。
執行緒安全,效率低。
linkedlist
:
底層資料結構是鍊錶,查詢慢,增刪快。
執行緒不安全,效率高。
list
有三個子類,我們到底使用誰呢?
得看要安全還是要效率,是查詢多還是增刪多
list介面實現
模擬實現list容器 namespace list listnode ppre listnode pnext t val templateclass listiterator listiterator const self l pnode l.pnode t operator t operator ...
Java中list介面的使用
list 特性 元素是有序的,元素可以重複 因為元素是有索引的 arraylist 底層使用的是陣列結構,特點 查詢很快,增刪很慢 執行緒不同步 linkedlist 底層使用的是鏈條結構,特點 查詢很慢,增刪很快 需求 使用arraylist儲存物件person類,並去除相同元素 class pe...
JAVA 集合的子介面List
list 列表 此介面對應的實現類的特點都是 有序的,可以重複的 重複與否與元素的equals方法有關 常用方法 void add int index,e element 將某一元素,插入到此集合的某一下標index處 e get int index 返回指定下標上的元素 int indexof o...