目錄
Hashtable
Concurrentjava面試——資料結構
Linkedjava面試——資料結構、TreeMap、TreeSet
ArrayList、LinkedList、Vector
Collection與Collections
二元樹
常見二元樹概念
二元樹的遍歷
首頁 Java Java面試題 java面試——資料結構

java面試——資料結構

Nov 25, 2020 pm 03:57 PM
java 資料結構 面試

java面試——資料結構

常見資料結構有:java面試——資料結構、Hashtable、 Concurrentjava面試——資料結構。

(相關影片分享:java教學影片

下面我們分別來介紹:

java面試——資料結構

  • 底層實作:java面試——資料結構底層整體結構是一個數組,數組中的每個元素又是一個鍊錶。每次新增一個物件(put)時會產生一個鍊錶物件(Object型別),Map中的每個Entry就是陣列中的一個元素(Map.Entry就是一個<key></key>) ,它具有由當前元素指向下一個元素的引用,這就構成了鍊錶。
  • 儲存原理:當HsahMap新增元素的時候,先計算Key物件的Hash值,得到陣列下標,如果陣列該位置為空則插入,否則遍歷這個位置鍊錶。當某個節點Key物件和Node物件均和新元素的equals時,用新元素的Value物件取代該節點的Value對象,否則插入新節點。 (注意:JDK 8之後加入了紅黑樹)

java面試——資料結構長度為2的n次方是為了讓length-1的二進位值所有位全為1,這種情況下,hash值與(table.length - 1)進行&運算計算index時,其結果就等同於hashcode後幾位的值,此時只要輸入的hashcode本身分佈均勻,Hash演算法的結果就是均勻的。所以,java面試——資料結構的預設長度為16是為了降低hash碰撞的幾率,同時也是適合的大小。

java面試——資料結構

Hashtable

#比較點 java面試——資料結構 Hashtable
實作原理 見上小節 和java面試——資料結構的實作原理幾乎一樣
Key和Value 允許Key和Value為null 不允許Key和Value為null
擴容策略 2倍擴容oldThr 2倍1擴容(oldCapacity
#安全性 執行緒不安全 執行緒安全性
#

Hashtable線程安全的策略實現代價很大,get/put所有相關操作都是synchronized的,在競爭激烈的並發場景中性能非常差。

Concurrentjava面試——資料結構

Concurrentjava面試——資料結構是Java並發套件中提供的一個線程安全且高效的java面試——資料結構實現,它採用了非常精妙的分段鎖定策略, Concurrentjava面試——資料結構的主幹是Segment數組。 Segment繼承自ReentrantLock,是一種可重入鎖。每個Segment都是一個子哈希表,Segment裡維護了一個HashEntry數組,並發環境下,對於不同Segment的資料進行操作不用考慮鎖定競爭。

Concurrentjava面試——資料結構

Linkedjava面試——資料結構、TreeMap、TreeSet

  • Linkedjava面試——資料結構:順序存取的java面試——資料結構(基於陣列和雙向鍊錶實作)。
  • TreeMap:內部排序(基於紅黑樹實作)。
  • TreeSet:有序的Set集合(基於二元樹實作)。

ArrayList、LinkedList、Vector

  • ArrayList:動態陣列(基於陣列實作)。
  • LinkedList:有序數組(基於雙向鍊錶實作)。
  • Vector:物件容器,可放入不同類別的物件(基於陣列實作)。

Collection與Collections

  • Collection:集合類別的上級接口,子接口主要有List、Set 、Queue等。
  • Collections:提供對集合進行搜尋、排序、替換和執行緒安全化等操作的工具類別。

(更多相關面試題推薦:java面試題目及答案

二元樹

常見二元樹概念

  • B 樹:請參閱資料庫部分https://blog.csdn.net/u012102104/article/details/797773362

  • # 平衡二元樹(AVL樹):各結點左右子樹深度差的絕對值不超過1。

  • 哈夫曼樹:帶有權路徑長度最小的二元樹稱為最優二元樹。哈夫曼樹構造不唯一,但所有葉子結點的權限路徑長度總和都是最小的。

  • 紅黑樹:一種自平衡二元尋找樹,它的性質有:

    1. 節點是紅色或黑色。
    2. 根節點是黑色。
    3. 每個葉子節點都是黑色的空節點(NIL節點)。
    4. 每個紅色節點的兩個子節點都是黑色。
    5. 從任一節點到其每個葉子的所有路徑都包含相同數目的黑色節點。

    從每個葉子到根的所有路徑上不能有兩個連續的紅色節點

二元樹的遍歷

// 1. 先序遍历算法 DLRvoid Preorder ( BinTree bt ) {
	if ( bt ) {
		visit ( bt->data );
		Preorder ( bt->lchild );
		Preorder ( bt->rchild );
	}}// 2. 中序遍历算法 LDRvoid Inorder ( BinTree bt ) {
	if ( bt ) {
		Inorder ( bt->lchild );
		visit ( bt->data );
		Inorder ( bt->rchild );
	}}// 3. 后序遍历 LRDvoid Postorder ( BinTree bt ) {
	if ( bt ) {
		Postorder ( bt->lchild );
		Postorder ( bt->rchild );
		visit ( bt->data );
	}}// 4. 按层次遍历。/* 思路:利用一个队列,首先将根(头指针)入队列,以后若队列不空则取队头元素 p,
如果 p 不空,则访问之,然后将其左右子树入队列,如此循环直到队列为空。*/void LevelOrder ( BinTree bt ) {
	// 队列初始化为空
	InitQueue ( Q );
	// 根入队列
	EnQueue ( Q, bt );
	// 队列不空则继续遍历
	while ( ! QueueEmpty(Q) ) {
		DeQueue ( Q, p );
		if ( p!=NULL ) {
			visit ( p->data );
			// 左、右子树入队列
			EnQueue ( Q, p->lchild );
			EnQueue ( Q, p->rchild );
		}
	}}// 非递归遍历二叉树一般借助栈实现
登入後複製

相關推薦:java入門教學

以上是java面試——資料結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Java 中的完美數 Java 中的完美數 Aug 30, 2024 pm 04:28 PM

Java 完美數指南。這裡我們討論定義,如何在 Java 中檢查完美數?

Java中的Weka Java中的Weka Aug 30, 2024 pm 04:28 PM

Java 版 Weka 指南。這裡我們透過範例討論簡介、如何使用 weka java、平台類型和優點。

Java 中的史密斯數 Java 中的史密斯數 Aug 30, 2024 pm 04:28 PM

Java 史密斯數指南。這裡我們討論定義,如何在Java中檢查史密斯號?帶有程式碼實現的範例。

Java Spring 面試題 Java Spring 面試題 Aug 30, 2024 pm 04:29 PM

在本文中,我們保留了最常被問到的 Java Spring 面試問題及其詳細答案。這樣你就可以順利通過面試。

突破或從Java 8流返回? 突破或從Java 8流返回? Feb 07, 2025 pm 12:09 PM

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

Java 中的時間戳至今 Java 中的時間戳至今 Aug 30, 2024 pm 04:28 PM

Java 中的時間戳記到日期指南。這裡我們也結合範例討論了介紹以及如何在java中將時間戳記轉換為日期。

創造未來:零基礎的 Java 編程 創造未來:零基礎的 Java 編程 Oct 13, 2024 pm 01:32 PM

Java是熱門程式語言,適合初學者和經驗豐富的開發者學習。本教學從基礎概念出發,逐步深入解說進階主題。安裝Java開發工具包後,可透過建立簡單的「Hello,World!」程式來實踐程式設計。理解程式碼後,使用命令提示字元編譯並執行程序,控制台上將輸出「Hello,World!」。學習Java開啟了程式設計之旅,隨著掌握程度加深,可創建更複雜的應用程式。

Java程序查找膠囊的體積 Java程序查找膠囊的體積 Feb 07, 2025 am 11:37 AM

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

See all articles