前端面試寫數(shù)據(jù)結(jié)構(gòu)題用什么語言?當(dāng)然,嚴(yán)格來說,是用java寫作的,這與語言無關(guān)。但是你也可以要求面試官用C寫!
數(shù)據(jù)結(jié)構(gòu)是一樣的,只是語言實(shí)現(xiàn)的問題。建議先看java的原理,然后可以買一本維斯的數(shù)據(jù)結(jié)構(gòu)(C語言版),因?yàn)镃數(shù)據(jù)結(jié)構(gòu)用起來有點(diǎn)繁瑣。如果想去排名前1梯隊(duì)的公司,還是推薦看c,如果是發(fā)展中的公司,看java。
JAVA數(shù)據(jù)結(jié)構(gòu)有哪幾種?JAVA數(shù)據(jù)結(jié)構(gòu)如下:
1、列表:
列表是有序的集合。使用這個(gè)界面,您可以精確地控制每個(gè)元素的插入位置。用戶可以使用索引(元素在列表中的位置,類似于數(shù)組下的gt標(biāo)記)來訪問列表中的元素,類似于Java的數(shù)組。
2、向量:
基于數(shù)組的鏈表實(shí)際上封裝了數(shù)組沒有的一些函數(shù)供我們使用,所以很難避免數(shù)組的局限性,性能無法超越數(shù)組。
還有一點(diǎn)很重要,Vector是同步的,這也是Vector和ArrayList的一個(gè)重要區(qū)別。
3、數(shù)組列表:
和Vector一樣,是基于數(shù)組的鏈表,不同的是ArrayList不是同步的。所以在性能上比Vector要好,但是在多線程環(huán)境下運(yùn)行時(shí),可能需要自己管理線程的同步。
4、鏈接列表:
linkedList與前兩個(gè)列表不同,因?yàn)樗皇腔跀?shù)組的,所以不受數(shù)組性能的限制。每個(gè)節(jié)點(diǎn)包含兩個(gè)方面:節(jié)點(diǎn)本身的數(shù)據(jù)和下一個(gè)節(jié)點(diǎn)的信息。
所以當(dāng)添加和刪除linkedList時(shí),你不需要。;不需要像基于數(shù)組的數(shù)組列表那樣移動(dòng)大量數(shù)據(jù)。可以通過改變nextNode的相關(guān)信息來實(shí)現(xiàn),這是linkedList的優(yōu)勢(shì)。
5、哈希集:
雖然Set和List都實(shí)現(xiàn)了集合接口,但是它們的實(shí)現(xiàn)方法卻大相徑庭。列表基本上是基于數(shù)組的。
但是Set是在HashMap的基礎(chǔ)上實(shí)現(xiàn)的,這是Set和List的根本區(qū)別。HashSet的存儲(chǔ)是使用HashMap中的鍵作為Set的對(duì)應(yīng)存儲(chǔ)項(xiàng)。
6、散列表:
基于哈希表的Map接口實(shí)現(xiàn)。這個(gè)實(shí)現(xiàn)提供了所有可選的映射操作,并允許使用空值和空鍵。(異步和允許使用nu除外。除了ll,HashMap類與Hashtable大致相同。)這個(gè)類不保證映射的順序,尤其不保證順序不變。
7、哈希表:
Hashtable是一個(gè)哈希表,它存儲(chǔ)的內(nèi)容是一個(gè)鍵值映射。Hashtable從Dictionary繼承,實(shí)現(xiàn)Map、Cloneable和Interface。
Hashtable函數(shù)都是同步的,這意味著它是線程安全的。它的鍵和值不能為空。