Java常見的(de)數據結構——Java學習筆記 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 技術分享 >

Java常見的(de)數據結構——Java學習筆記

發表時(shí)間:2020-10-26

發布人(rén):融晨科技

浏覽次數:56

目錄

  • 前言:
  • 一、什麽是(shì)數據結構?
  • 二、我們爲(wéi / wèi)什麽要(yào / yāo)了(le/liǎo)解數據結構?
  • 三、Java中我們常見的(de)數據結構是(shì)哪些?
    • 棧(Stack)
      • 概述:
      • 特點:
      • 場景:
    • 隊列(Queue)
      • 概述:
      • 特點:
      • 場景:
    • 數組(Array)
      • 概述:
      • 特點:
      • 場景:
    • 鏈表(Linked list)
      • 概述:
      • 特點:
      • 場景:
    • 樹(Tree)
      • 概述:
      • 特點:
      • 場景:

前言:

數據結構是(shì)計算機存儲和(hé / huò)組織數據的(de)方式。Java中的(de)集合就(jiù)是(shì)基于(yú)數據結構編寫出(chū)來(lái)的(de),通過了(le/liǎo)解數據結構,我們再面對具體場景的(de)時(shí)候,就(jiù)能夠用精心選擇的(de)數據結構可以(yǐ)帶來(lái)更高的(de)運行或者存儲效率。

一、什麽是(shì)數據結構?

數據結構(Data Structure)是(shì)帶有結構特性的(de)數據元素的(de)集合,它研究的(de)是(shì)數據的(de)邏輯結構和(hé / huò)數據的(de)物理結構以(yǐ)及它們之(zhī)間的(de)相互關系,并對這(zhè)種結構定義相适應的(de)運算,設計出(chū)相應的(de)算法,并确保經過這(zhè)些運算以(yǐ)後所得到(dào)的(de)新結構仍保持原來(lái)的(de)結構類型。
簡而(ér)言之(zhī),數據結構是(shì)相互之(zhī)間存在(zài)一種或多種特定關系的(de)數據元素的(de)集合,即帶“結構”的(de)數據元素的(de)集合。“結構”就(jiù)是(shì)指數據元素之(zhī)間存在(zài)的(de)關系,分爲(wéi / wèi)邏輯結構和(hé / huò)存儲結構。

二、我們爲(wéi / wèi)什麽要(yào / yāo)了(le/liǎo)解數據結構?

以(yǐ)做一道(dào)名菜“佛跳牆”爲(wéi / wèi)例:

料理的(de)一個(gè)環境 ------> 程序運行的(de)時(shí)候的(de)環境
做一道(dào)正宗“佛跳牆” ------> 項目的(de)一個(gè)具體需求
料理的(de)大(dà)廚 ------> 編寫程序的(de)程序員
料理的(de)一些食材、器具 ------> 我們要(yào / yāo)編寫的(de)一行行的(de)代碼
“佛跳牆的(de)菜譜” ------> 我們編寫代碼要(yào / yāo)用的(de)數據結構

要(yào / yāo)想做出(chū)來(lái)的(de)“佛跳牆”正宗、美味,就(jiù)需要(yào / yāo)我們按照正宗菜譜的(de)指導,分别用不(bù)同的(de)方法料理我們的(de)不(bù)同的(de)食材。

不(bù)同的(de)集合底層采用的(de)數據結構也(yě)是(shì)不(bù)一樣的(de),我們了(le/liǎo)解這(zhè)些集合底層是(shì)基于(yú)哪些數據結構存儲和(hé / huò)組織數據,就(jiù)能在(zài)具體情景下針對具體問題做出(chū)更匹配的(de)選擇。

三、Java中我們常見的(de)數據結構是(shì)哪些?

常用結構有:棧、隊列、數組、鏈表和(hé / huò)紅黑樹。

棧(Stack)

概述:

它是(shì)運算受限的(de)線性表,其限制是(shì)僅允許在(zài)标的(de)一端進行插入和(hé / huò)删除操作,不(bù)允許在(zài)其他(tā)任何位置進行添加、查找、删除等操作。

特點:

棧的(de)入口、出(chū)口的(de)都是(shì)棧的(de)頂端位置。
先進後出(chū)原則(即,存進去的(de)元素,要(yào / yāo)在(zài)後它後面的(de)元素依次取出(chū)後,才能取出(chū)該元素)。

場景:

子(zǐ)彈壓進彈夾,先壓進去的(de)子(zǐ)彈在(zài)下面,後壓進去的(de)子(zǐ)彈在(zài)上(shàng)面,當開槍時(shí),先彈出(chū)上(shàng)面的(de)子(zǐ)彈,然後才能彈出(chū)下面的(de)子(zǐ)彈。
在(zài)這(zhè)裏插入圖片描述

隊列(Queue)

概述:

它同堆棧一樣,也(yě)是(shì)一種運算受限的(de)線性表,其限制是(shì)僅允許在(zài)表的(de)一端進行插入,而(ér)在(zài)表的(de)另一端進行删除。

特點:

隊列的(de)入口、出(chū)口各占一側。
先進先出(chū)原則(即,存進去的(de)元素,要(yào / yāo)在(zài)後它前面的(de)元素依次取出(chū)後,才能取出(chū)該元素)。

場景:

射擊子(zǐ)彈,先進入的(de)子(zǐ)彈被先射出(chū),然後再進入一顆子(zǐ)彈。
在(zài)這(zhè)裏插入圖片描述

數組(Array)

概述:

是(shì)有序的(de)元素序列,數組是(shì)在(zài)内存中開辟一段連續的(de)空間,并在(zài)此空間存放元素。

特點:

查找元素快:通過索引,可以(yǐ)快速訪問指定位置的(de)元素
增删元素慢:數組無法改變長度,增删數組元素時(shí),需要(yào / yāo)創建新數組,原數組元素根據新數組新的(de)索引位置一一複制。

場景:

學校宿舍房間号,按照一層層從左往右一間間的(de)順序依次排好,根據房間号找到(dào)對應宿舍的(de)人(rén)很快。但是(shì)要(yào / yāo)是(shì)更換房間号,就(jiù)需要(yào / yāo)将全部樓層的(de)都更換一次。

鏈表(Linked list)

概述:

由一系列結點Node(鏈表中每一個(gè)元素稱爲(wéi / wèi)一個(gè)結點)組成,結點可以(yǐ)在(zài)運行時(shí)動态生成。每個(gè)結點包括兩個(gè)部分:一個(gè)是(shì)存儲數據元素的(de)數據域,另一個(gè)是(shì)存儲下一個(gè)結點地(dì / de)址的(de)指針域。

特點:

查找元素慢:想查找某個(gè)元素,需要(yào / yāo)通過連接的(de)節點,依次向後查找指定元素。
增删元素快:隻需要(yào / yāo)修改連接元素的(de)地(dì / de)址值即可。

場景:

我們手機上(shàng)都存儲有别人(rén)的(de)手機号,要(yào / yāo)聯系之(zhī)前認識的(de)一個(gè)人(rén),但是(shì)沒有他(tā)的(de)手機号,就(jiù)需要(yào / yāo)打電話找到(dào)有他(tā)手機号的(de)人(rén),再聯系他(tā)。
我們要(yào / yāo)想以(yǐ)後繼續聯系,但是(shì)手機号碼存儲滿了(le/liǎo),就(jiù)需要(yào / yāo)删除一個(gè)來(lái)保留這(zhè)個(gè)手機号。

樹(Tree)

概述:

樹是(shì)典型的(de)非線性結構,它是(shì)由n(n>0)個(gè)有限節點組成一個(gè)具有層次關系的(de)集合。把它叫做“樹”是(shì)因爲(wéi / wèi)它看起來(lái)像一棵倒挂的(de)樹,也(yě)就(jiù)是(shì)說(shuō)它是(shì)根朝上(shàng),而(ér)葉朝下的(de)。

特點:

沒有父節點的(de)節點稱爲(wéi / wèi)根節點,每個(gè)數有且隻有一個(gè)根節點。
每一個(gè)非根節點有且隻有一個(gè)父節點。
每個(gè)節點有零個(gè)或多個(gè)子(zǐ)節點。

場景:

平衡二叉樹(紅黑樹)

相關案例查看更多