資料結構-增強資料的功能
這裡是修真院後端小課堂,每篇分享文從
【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】
八個方面深度解析後端知識/技能,本篇分享的是:
【資料結構-增強資料的功能】
【修真院java小課堂】資料結構-增強資料的功能
大家好,我是IT修真院深圳分院第12期的學員,一枚正直純潔善良的java程式設計師,今天給大家分享一下,修真院官網java任務10,拓展的內容-資料結構之增強陣列。
(1)背景介紹
程式=資料結構+演算法,都說不會資料結構跟演算法的軟體工程師不是好的程式設計師,陣列作為資料結構中很基礎的一種,學習跟跟深入瞭解非常有必要。今天的小課堂以陣列為基礎,將陣列封裝起來,給其新增增刪改查和擴容等功能。
(2)知識剖析
a)陣列的特點
陣列的長度一旦定義則不能改變
陣列中的元素都有整數索引
陣列只能儲存同一型別的元素
陣列即可以儲存基本資料型別,又可以儲存引用資料型別
b)陣列的優缺點
由於陣列每個元素都是有索引的,所以訪問陣列的任一元素是非常快的,複雜度為O(1)級別,但是往陣列任意一個位置插入資料則不方便,因為每次插入一個元素,後面的元素就要往後挪動一位。時間複雜度為O(n),因此如果需求是頻繁地查詢比較適合用陣列。
c)改進陣列
可以給陣列加上自動擴容地功能。
(3)常見問題
陣列和連結串列的比較?
(4)解決方案
獲取結點:只能遍歷連結串列,然後一個一個檢視
新增結點(在結點2後面新增一個結點9):
把結點2的下一個結點地址值修改為新結點9的地址值,把新結點9的下一個地址值改為結點3的地址值
連結串列特點:查詢慢,增刪快;
(5)編碼實戰
5.1將陣列封裝起來
這裡要說明下是使用了泛型,也就是往這個自定義的陣列容器中放任何東西。(除了基本型別?)
com.ch0918.arrayArray<> { [] (capacity) { = ([])Object[capacity]= } () { ()} }
給陣列新增新功能,例如得到陣列的大小,陣列的容量,判斷陣列是否為空。//得到陣列的大小
() { } () { .} () { == }
往數組裡新增元素,特別注意這裡是做了自動擴容處理的,當數組裡的元素達到陣列的長度是,就將陣列的容量擴大到陣列原來的兩倍。
(e) { addElement(e)} (indexe) { (index < || index > ) { IllegalArgumentException()} (== .) { resize(* .)} [index] = e++} (e) { addElement(e)}
修改陣列的某個位置的元素
(indexe) { (index < || index > ) { IllegalArgumentException()} [index] = e}
查詢陣列
(e) { (i =i < i++) { ([i] == e) { System..println([i])} } } (e) { (i = i < i++) { ([i] == e) { i} } -}
刪除陣列
(index) { (index < || index > -) { IllegalArgumentException()} (< ./){ resize(./)} temp = [index](i = indexi < i++) { [i] = [i+]} --temp} () { removeElementAt()} () { removeElementAt(-)} (e) { elementIndex = findElementIndex(e)(elementIndex != -){ removeElementAt(elementIndex)}{ IllegalArgumentException()} }
擴容的方法
(capacity) { Array<> newArray = Array<>(capacity)System.(newArray.)= newArray.}
(6)拓展思考
(7)參考文獻
【參考一】https://blog.csdn.net/boss_way/article/details/78358615
(8)更多討論
Q1:基於陣列的資料結構常見的有哪些?
A1:java中以陣列為基礎的最常見就是ArrayList了,一般查詢操作比較頻繁,並且元素可重複,並且不需要以key-value形式儲存的,都會選擇用ArrayList儲存資料。
Q2:什麼時候適合用陣列
A2:當索引是有意義的,比如一個班的學生,學號是對應一個學生(當然學號不能太大,比如1,2,3...)這時候用陣列比較適合。
Q3:除了陣列這種線性資料結構,還有哪些線性的資料結構?
A3:另外還有連結串列,棧,佇列。
(9)鳴謝
(10)結束語
今天的分享就到這裡啦,歡迎大家點贊、留言、轉發、拋磚~
更多內容,可以加入IT交流群565734203與大家一起討論交流
這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地