1. 程式人生 > 實用技巧 >泛型的萬用字元,上下限,資料結構,Lst集合

泛型的萬用字元,上下限,資料結構,Lst集合

泛型的萬用字元

當使用泛型類或者泛型介面,傳遞的資料中,泛型的型別不確定,可以通過萬用字元<?>表示。一旦程式當中使用泛型的萬用字元後,只能使用Object類中的共性的方法,集合中元素自身方法無法使用。

萬用字元的基本使用

泛型的萬用字元:不知道使用什麼型別來接收的時候,此時可以使用?,?代表未知的萬用字元。

此時只能接收資料,不能往該集合當中儲存資料。

萬用字元的高階用法-----受限泛型

之前設定泛型的時候,實際上是可以任意設定的。只要是類就可以的,但是在Java的泛型當中還可以指定一個的泛型的上限和下限

泛型的上限:
  • 格式:型別名稱 <? extends 類名> 物件名稱

  • 意義:只能接收該型別及其子類

泛型的下限
  • 格式:型別名稱 <? super 類名> 物件名

  • 意義:只能接收該類型別及其父類型別

比如說:已知的頂級父類Object,String類,Number類,Integer類 ,其中Number類是Integer的父類

資料結構

資料結構有什麼作用?

當我們使用著Java官方給你提供的容器的時候,我們用起來是非常的好的,ArrayList其實就是一個無限擴充的陣列,LinkedList其實一個連結串列。

現實世界中儲存資料,我們要通過一些工具或者建模來進行儲存。每種資料結構都有自己的優缺點。

而演算法,在這麼多的資料中如何以最快的速度實現插入、刪除、查詢資料問題。

我們Java語言是一種面向物件的程式語言,Java就相當於自動擋汽車,C語言就相當於手動擋汽車。資料結構呢?

資料結構就相當於變速箱的工作原理,不懂資料結構原理的,對於開發Java程式也是沒有任何問題,

如果你懂變速箱的原理,那麼不但可以開車,也可以修車,還可以造車。

資料結構內容非常多,我們介紹Java當中常見的資料結構:堆疊、佇列、陣列、連結串列和紅黑樹一一給大家介紹下。

常見的資料結構:

資料儲存的常用結構:棧、佇列、陣列、連結串列和紅黑樹

  • :stack,又稱堆疊,它是運算受限的線性表結構,它的限制是僅允許在標的的一端進行插入和刪除操作,不允許在其他任何位置進行新增、查詢、刪除等操作。

    簡單的說,採用該結構的集合,對元素的存取有一下特點:

    • 先進後出(存進去的元素,要在他後面的元素依次取出後,才能取出該元素)。例如:子彈壓進彈夾和子彈從彈夾彈出的動作。

    • 棧的入口、出口都是棧的頂端位置。

空棧:棧頂:棧底:

壓棧:就是儲存元素,把元素儲存到棧的頂端位置,棧中已有的元素依次向棧底方向移動一個位置。

彈棧:就是取出元素,把棧的頂端位置元素取出,棧中已有元素依次向棧頂方向移動一個位置。

佇列
  • 佇列:queue,簡稱對,它同堆疊幾乎一樣的,也是一種運算受限的線性表結構,它的限制是僅允許在標的的一端進行插入,在標的的另一端進行刪除。

    簡單的說,採用該結構的集合,對元素的存取有以下特點:

    • 先進先出( 存進去的元素,要在它前面的元素依次取出後,才能取出該元素)。例如:火車過山洞,火車頭先進山洞,火車頭先從山洞出來,車尾後進來,最後出來

    • 佇列的入口、出口各佔一側。

陣列

  • 陣列:Array,是有序的元素序列,陣列是在記憶體當中開闢一段連續的空間,並在此空間記憶體儲元素。例如:

    生活中的酒店,酒店當中的房間號是連續的,不間斷,有50個房間,從001---050每個房間都有固定編號,通過編號就可以快速找到酒店房間的住戶。

    簡單的說,採用此結構的集合,對元素存取有以下特點:

  • 查詢元素快:通過索引,可以快速的訪問到指定位置的元素。

  • 增刪元素慢:

    1. 指定索引位置增加元素:需要建立一個新陣列,將指定的新元素儲存到指定的索引位置,再把源陣列元素根據他原來的索引,複製到新陣列對應的索引位置。

    2. 指定索引位置刪除元素:需要建立一個新陣列,把源陣列當中的元素根據索引,複製到新陣列對應索引的位置,源陣列中指定的索引位置元素不復制到新陣列當中。

連結串列結構

  • 連結串列:linked list,由一系列結點node(連結串列當中的每個元素稱為結點)組成,結點可以在執行時動態生成。每個結點包含兩個部分:一個是用於儲存資料元素的資料域,另一個是用來儲存下一個結點地址的指標域。我們常說的連結串列結構有單向連結串列和雙向連結串列

    簡單的說,採用此結構的集合,對元素的存取有以下特點:

  • 多個結點之間,通過地址進行連線。比如:多個人玩丟手絹,每個人右手拉住下一個人的左手,上一個人的左手拉住該人的右手。依次類推,多個人就被連線起來。

  • 查詢元素比較慢:想要查詢某個元素,需要通過連線的結點,依次向後查詢指定的元素。

  • 刪除元素比較快:

    1. 增加一個元素:只需要修改連線下個元素的地址即可。

    2. 刪除一個元素:只需要修改連線下一個元素的地址即可。

紅黑樹

  • 二叉樹:binary tree,每個節點數不超過2的樹(tree)

    簡單的理解,就是類似於我們生活中的樹的結構,只不過每個節點上都最多隻能有兩個子節點。

    頂上的節點稱為根節點,兩邊的被稱為“左子樹”和“右子樹”

    在二叉樹中有一種比較特殊樹結構叫做紅黑樹,紅黑樹本身就是一個二叉樹

    紅黑樹的約束:

    1. 節點可以是紅色的也可以是黑色的

    1. 根節點是黑色的 3. 葉子節點(空節點)是黑色的 4. 每個紅色節點的子節點都是黑色的 5. 任何一個節點到其每一個葉子節點的所有路徑上的黑色節點數是相同的。

紅黑數的特點:

查詢速度非常快,趨近於平衡樹,查詢葉子元素最小和最大不能超過2倍。

List集合

我們主要介紹java.util.List集合和java.util.Set集合

List介面介紹

java.util.List介面繼承自Collection介面,是單列集合的一個重要分支,在List集合當中允許出現重複的元素,所有的元素都是以一種線性方式進行儲存的,在List集合當中基本上我們可以通過索引來訪問集合當中的元素。另外List集合還有一個特點就是元素是有序的,指的是存取元素順序相同。

List介面當中的常用API方法:增刪改查

出了繼承Collection介面當中的方法外,還增加了一些根據元素索引來操作集合的特定方法:

  • public void add(int index,E element):將指定的元素,新增到給定集合中的指定位置上

  • public E get(int index):根據指定的索引獲取對應位置上的元素

  • public E remove(int index):通過索引刪除索引對應位置上的元素

  • public E set(int index,E element) :在指定索引位置上替換成給定的元素,並且返回更新前的元素。