Java是一種可以撰寫跨平臺(tái)應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言枣申。Java 技術(shù)具有卓越的通用性、高效性看杭、平臺(tái)移植性和安全性忠藤,廣泛應(yīng)用于PC、數(shù)據(jù)中心楼雹、游戲控制臺(tái)模孩、科學(xué)超級(jí)計(jì)算機(jī)、移動(dòng)電話和互聯(lián)網(wǎng)贮缅,同時(shí)擁有全球最大的開發(fā)者專業(yè)社群榨咐。
給你學(xué)習(xí)路線:html-css-js-jq-javase-數(shù)據(jù)庫(kù)-jsp-servlet-Struts2-hibernate-mybatis-spring4-springmvc-ssh-ssm
數(shù)據(jù)元素相互之間的關(guān)系稱為結(jié)構(gòu)。有四類基本結(jié)構(gòu):集合携悯、線性結(jié)構(gòu)祭芦、樹形結(jié)構(gòu)筷笨、圖狀結(jié)構(gòu);
集合結(jié)構(gòu):除了同屬于一種類型外憔鬼,別無(wú)其它關(guān)系
線性結(jié)構(gòu):元素之間存在一對(duì)一關(guān)系常見類型有: 數(shù)組,鏈表,隊(duì)列,棧,它們之間在操作上有所區(qū)別.例如:鏈表可在任意位置插入或刪除元素,而隊(duì)列在隊(duì)尾插入元素,隊(duì)頭刪除元素,棧只能在棧頂進(jìn)行插入,刪除操作.
樹形結(jié)構(gòu):元素之間存在一對(duì)多關(guān)系,常見類型有:樹(有許多特例:二叉樹、平衡二叉樹胃夏、查找樹等)
圖形結(jié)構(gòu):元素之間存在多對(duì)多關(guān)系,圖形結(jié)構(gòu)中每個(gè)結(jié)點(diǎn)的前驅(qū)結(jié)點(diǎn)數(shù)和后續(xù)結(jié)點(diǎn)多個(gè)數(shù)可以任意
Java中有幾種常用的數(shù)據(jù)結(jié)構(gòu)轴或,主要分為Collection和Map兩個(gè)主要接口,而程序中最終使用的數(shù)據(jù)結(jié)構(gòu)是繼承自這些接口的數(shù)據(jù)結(jié)構(gòu)類仰禀。其主要關(guān)系:
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零照雁,五五四,六零七 】答恶,無(wú)論你是大牛還是小白饺蚊,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具悬嗓,很多干貨和技術(shù)資料分享污呼!
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零,五五四包竹,六零七 】燕酷,無(wú)論你是大牛還是小白籍凝,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)!裙內(nèi)有開發(fā)工具苗缩,很多干貨和技術(shù)資料分享饵蒂!
1、幾個(gè)常用類的區(qū)別:
1.ArrayList: 元素單個(gè)酱讶,效率高退盯,多用于查詢
2.Vector: 元素單個(gè),線程安全泻肯,多用于查詢
3.LinkedList:元素單個(gè)得问,多用于插入和刪除
4.HashMap: 元素成對(duì),元素可為空
5.HashTable: 元素成對(duì)软免,線程安全宫纬,元素不可為空
二、Vector膏萧、ArrayList和LinkedList
大多數(shù)情況下漓骚,從性能上來(lái)說(shuō)ArrayList最好,但是當(dāng)集合內(nèi)的元素需要頻繁插入榛泛、刪除時(shí)LinkedList會(huì)有比較好的表現(xiàn)蝌蹂,但是它們?nèi)齻€(gè)性能都比不上數(shù)組,另外Vector是線程同步的曹锨。所以:
如果能用數(shù)組的時(shí)候(元素類型固定孤个,數(shù)組長(zhǎng)度固定),請(qǐng)盡量使用數(shù)組來(lái)代替List沛简;
如果沒有頻繁的刪除插入操作齐鲤,又不用考慮多線程問(wèn)題,優(yōu)先選擇ArrayList椒楣;
如果在多線程條件下使用给郊,可以考慮Vector;
如果需要頻繁地刪除插入捧灰,LinkedList就有了用武之地淆九;
如果你什么都不知道,用ArrayList沒錯(cuò)毛俏。
三炭庙、Collections和Arrays
在 Java集合類框架里有兩個(gè)類叫做Collections(注意,不是Collection;涂堋)和Arrays焕蹄,這是JCF里面功能強(qiáng)大的工具,但初學(xué)者往往會(huì)忽視唧席。按JCF文檔的說(shuō)法擦盾,這兩個(gè)類提供了封裝器實(shí)現(xiàn)(Wrapper Implementations)嘲驾、數(shù)據(jù)結(jié)構(gòu)算法和數(shù)組相關(guān)的應(yīng)用。
想必大家不會(huì)忘記上面談到的“折半查找”迹卢、“排序”等經(jīng)典算法吧辽故,Collections類提供了豐富的靜態(tài)方法幫助我們輕松完成這些在數(shù)據(jù)結(jié)構(gòu)課上煩人的工作:
binarySearch:折半查找。
sort:排序腐碱,這里是一種類似于快速排序的方法誊垢,效率仍然是O(n * log n),但卻是一種穩(wěn)定的排序方法症见。
reverse:將線性表進(jìn)行逆序操作喂走,這個(gè)可是從前數(shù)據(jù)結(jié)構(gòu)的經(jīng)典考題哦!
rotate:以某個(gè)元素為軸心將線性表“旋轉(zhuǎn)”谋作。
swap:交換一個(gè)線性表中兩個(gè)元素的位置芋肠。
……
Collections還有一個(gè)重要功能就是“封裝器”(Wrapper),它提供了一些方法可以把一個(gè)集合轉(zhuǎn)換成一個(gè)特殊的集合遵蚜,如下:
unmodifiableXXX:轉(zhuǎn)換成只讀集合帖池,這里XXX代表六種基本集合接口:Collection、List吭净、Map睡汹、Set、SortedMap和SortedSet寂殉。如果你對(duì)只讀集合進(jìn)行插入刪除操作囚巴,將會(huì)拋出UnsupportedOperationException異常。
小編推薦一個(gè)學(xué)Java的學(xué)習(xí)裙【 六五零友扰,五五四彤叉,六零七 】,無(wú)論你是大牛還是小白焕檬,是想轉(zhuǎn)行還是想入行都可以來(lái)了解一起進(jìn)步一起學(xué)習(xí)姆坚!裙內(nèi)有開發(fā)工具,很多干貨和技術(shù)資料分享实愚!
synchronizedXXX:轉(zhuǎn)換成同步集合。
singleton:創(chuàng)建一個(gè)僅有一個(gè)元素的集合兔辅,這里singleton生成的是單元素Set腊敲,
singletonList和singletonMap分別生成單元素的List和Map。
空集:由Collections的靜態(tài)屬性EMPTY_SET维苔、EMPTY_LIST和EMPTY_MAP表示碰辅。