1. 程式人生 > >資料結構-增強資料的功能

資料結構-增強資料的功能

這裡是修真院後端小課堂,每篇分享文從

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴充套件思考】【更多討論】【參考文獻】

八個方面深度解析後端知識/技能,本篇分享的是:

【資料結構-增強資料的功能】

【修真院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)結束語

今天的分享就到這裡啦,歡迎大家點贊、留言、轉發、拋磚~

 

PPT連結 視訊連結

更多內容,可以加入IT交流群565734203與大家一起討論交流

這裡是技能樹·IT修真院:https://www.jnshu.com,初學者轉行到網際網路的聚集地