日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树

發布時間:2024/1/17 java 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

?

?  不多說,直接上干貨!

  首先來說一個非常形象的例子,來說明下數組和鏈表。


  上體育課的時候,老師說:你們站一隊,每個人記住自己是第幾個,我喊到幾,那個人就舉手,這就是數組
  老師說,你們每個人記住自己前面的人和后面的人,然后老師只知道第一人是誰。 然后你們各自由活動,老師要找某一個人,是不是每次都是從第一個開始往自己身后的人開始傳達?這就是鏈表
  老師說: 大家1,2,3,4報數,凡是報1,為1隊,凡是報2的為2隊....... ?這就是散列(哈希)。而這個4就相當于預定義好的桶的個數。

?

程序中,存放指定的數據最常用的數據結構有兩種:數組和鏈表。

?


數組和鏈表的區別:
  1、 ?數組是將元素在內存中連續存放。
   ? ? ? 鏈表中的元素在內存中不是順序存儲的,而是通過存在元素中的指針聯系到一起。
  2、 ?數組必須事先定義固定的長度,不能適應數據動態的增減的情況。當數據增加時,可能超出原先定義的元素個數;當數據減少時,造成內存浪費;
    鏈表動態地進行存儲分配,可以適應數據動態地增減的情況。
  3、(靜態)數組從棧中分配空間,對于程序員方便快速,但是自由度小;
    鏈表從堆中分配空間,自由度大但是申請管理比較麻煩。

?


數組和鏈表在存儲數據方面到底誰好?根據數組和鏈表的特性,分兩種情況討論:
  1、當進行數據查詢時,數組可以直接通過下標迅速訪問數組中的元素。
   ? ? ?而鏈表則需要從第一個元素開始一直找到需要的元素位置
   ? ? ?顯然,數組的查詢效率會比鏈表的高。

  2、當進行增加或刪除元素時,在數組中增加一個元素,需要移動大量元素,在內存中空出一個元素的空間,然后將要增加的元素放在其中。

? ? ? ? ? ? ?同樣,如果想刪除一個元素,需要移動大量去填掉被移動的元素,而鏈表只需改動元素中的指針即可實現增加或刪除元素。

?

?


  那么哈希表,是既能具備數組的快速查詢的優點,又能融合鏈表方便快捷的增加刪除元素的優勢。
  所謂的hash,簡單的說就是散列,即將輸入的數據通過hash函數得到一個key值,輸入的數據存儲到數組中下標的key值的數組單元中去。 

?

?

?

?

  Java中數據存儲方式最底層的兩種結構,一種是數組,另一種就是鏈表。

  數組的特點:連續空間,尋址迅速,但是在刪除或者添加元素的時候需要有較大幅度的移動,所以查詢速度快,增刪較慢。

  而鏈表正好相反,由于空間不連續,尋址困難,增刪元素只需修改指針,所以查詢慢、增刪快。

  有沒有一種數據結構來綜合一下數組和鏈表,以便發揮他們各自的優勢?答案是肯定的!就是:哈希表

  哈希表具有較快(常量級)的查詢速度,及相對較快的增刪速度,所以很適合在海量數據的環境中使用。一般實現哈希表的方法采用“拉鏈法”,我們可以理解為“鏈表的數組”,如下圖:

  哈希表。如拿HashMap來說。

?

  從上圖中,我們可以發現哈希表是由數組 ?+ ? 鏈表組成的,一個長度為16的數組中,每個元素存儲的是一個鏈表的頭結點。那么這些元素是按照什么樣的規則存儲到數組中呢。一般情況是通過hash(key)%len獲得,也就是元素的key的哈希值對數組長度取模得到。比如上述哈希表中,12%16=12,28%16=12,108%16=12,140%16=12。所以12、28、108以及140都存儲在數組下標為12的位置。它的內部其實是用一個Entity數組來實現的,屬性有key、value、next。

總結

以上是生活随笔為你收集整理的牛客网Java刷题知识点之数组、链表、哈希表、 红黑二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。