java怎麼學習集合?

時間 2021-05-30 12:12:22

1樓:言葉之庭

主要講的幾個分支結構:

Collection

List Set

ArrayList LinkedList Vctor HashSet SortedSetTreeSet實現

這是主要講的幾個重要的集合;

Collection是乙個介面,裡面包含了增改刪的方法,list多了索引,而set是完全一樣的。

ArrayList是乙個重要的集合結構,可以有很多方式建立物件,不過只能實現父類自身的方法,arraylist有自身獨有的方法,那就是index索引,索引可以找到下標直接進行增刪,每一次的增刪也就意味著其他元素都得向前或者向後移乙個位置,來給arraylist讓位,這也是速度比較慢的原因。

它的特點:有下標,有序,可以重複。

主要的方法有:add, remove, addAll, equal,contain, containAll, clear,size,iterator,toArray

arraylist特有的:add(可以指定下標元素),allAll(指定的集合插入到指定位置)get(獲取集合中的指定元素)

set(int index, E elements)替代,remove()移除元素

Collections:因為有許多靜態方法,可以直接呼叫。

方法:addAll(Collection son TbinarySearch()reverse, shuffle, sort(有點意思,需要操作下),copy, full, max,min.

LinkedList:同樣是有序有下標可重複,但它是鏈性結構,互相咬合,插入方便,查詢麻煩。方法和ArrayList(不)一樣

貌似挺麻煩的

HashSet: 這是乙個線性,鍊錶結合的儲存結構,由雜湊值來確定線性位置,如果雜湊值相同,則會在此處開闢鏈路,這個鏈路供雜湊值相同,但值或者內容不同的物件存貯。

所以需要重寫雜湊值和equal兩個比較方法。

TreeSet 二叉樹,如果是物件,還需要主模板類繼承Comparable<>重寫裡面的比較方法。

1.16更新

上半篇提到的重寫equal和hashcode以及comparable方法,在什麼時候重寫呢,這是乙個問題。

在list之中,因為元素是可以重複的,並且有下標,所以不用比較他們的存放位置以及是否是相同,但set和map也就不一樣了,他們儲存的資料是無重複,無需無下標的,所以set和map在儲存基本資料型別/字串和自定義建立的物件是不一樣的,基本資料型別方法裡面已經有了comparaTo,toString,equal,hashcode的方法,所以不用擔心資料新增時候的比較和排序(在二叉樹中)問題,但引用資料型別是不一樣的,他們是自定義類,擁有各自唯一的特性,系統不知道你想要怎麼比較所以才會有重寫了。

先來講set吧,因為map實際上也是set的延展。

set同list是不一樣的, set無序無下標不可以重複,而list有序有下標可以重複,所以當新增重複元素的時候時候,系統是怎麼做的呢,先來說hashset,hashset的資料結構是雜湊結構,像俄羅斯方塊一樣,當新增元素的時候,系統會呼叫hashcode方法來給出這個數值乙個hash值,並把它安排到特定的位置,字串,char,整數,浮點這些都有不同的計算方法,拿數值除以31取餘,再次新增元素的時候,如果雜湊值不同那麼就給值存放乙個位置,如果相同,那就會動用equal方法了,這個比較會比較物件的實際內容,也就是資料是否是一樣的,如果一樣,那麼就清除,如果不一樣,那就把它在此處新開闢一條線性空間來挨個儲存。

上面說的是基本資料型別的hashset儲存方式,引用資料型別其實也是類似的,但引用資料型別(特別是自定義物件)需要重寫equal和hashcode的方法,把自定義物件的屬性新增到equal的比較之中,hashcode獲取方式也是如此,同樣當物件新增的時候,會根據hashcode方法獲得乙個hashcode值,這個值如果相同,再動用equal方法,判斷這個物件是否所有屬性都相同,從而來儲存。

set說完了,接下來講一下treeset,數的儲存不是根據hashcode值,而是另外一種儲存方式,如果是基本資料型別那麼也就是Assical編碼,如果是引用資料型別也就是用繼承comparable的方式重寫compareTo方法來進行比較。

他們的遍歷方式大同小異,可以用迭代器,返回乙個迭代器,呼叫迭代器之中的hasnext和next方法用while迴圈進行判斷,依此輸出;也可以用foreach迴圈遍歷,list中因為有下標,所以多了乙個for迴圈遍歷。

接下來講下map:

map分為兩種,hashMap和treeMap,不過多了乙個鍵值對,鍵完全按照hashset和treeSet的方式儲存,不過多了乙個值繫結在身上,因此新增方式有些不同,用的是put,而get方法填入key獲取的是值。

同樣分為了引用資料型別(自定義物件)和基本資料型別不同的儲存方式,新增時候的比較,這與上面講的set對應,完全一樣。

Map的遍歷有兩個方法獲取到key值和keyvalue打包的Entry值,一旦把獲取的值轉變為了Set,接下來也就比較好辦了,依照以上相同的遍歷方式遍歷即可。

0.先轉變為set

1.迭代器,while迴圈迭代器裡的方法

2.foreach迴圈

不過泛型和匿名內部類還不是太了解,下次可以嘗試寫下它們。

如何學習Java的NIO?

夢中人 BIO NIO 入門 Netty 先導 相信很多同學對於網路 IO 來說是相對陌生的,在很長時間的開發中可能都不會用到 IO 或者說 Netty 但是網上大家都在夸夸其談,Netty 怎麼怎麼好,怎麼怎麼 np,似乎大家都在用,我也想入門但卻很迷糊,Netty這玩意到底是幹啥的?我用它幹嘛?...

學習java好就業嗎?

導致用人單位不太喜歡用培訓機構畢業的學員。2017年7月26日 需要有一點英語基礎的,至少要過英語四級嘛,否則研究新技術看文件會很吃力,除非混吃等死,不然一需要不斷研究新技術的,當然了這個看得多了也會慢慢好起來。我見過幾個培訓出來的學員,只會實現某些具體功能,原理性的東西比較匱乏,更加不擅長思考解決...

Java學習上遇上瓶頸了,我使用Java進行開發兩年了,主要做的是平台的公升級與維護,其中涉及到的技術包括Servlet JSP EJB JMS JMX XML等技術,但這些技術都是知道如何使用。現

penn 才兩年就遇到瓶頸了嗎?所有技術你可以去摸一遍,不需要精通,只要知道這整個一條線是怎麼串通在一起的,簡而言之你要達到遇到什麼問題應該去查什麼資料,而不是手足無措。如果你去研究設計模式,研究某個框架,研究得很深入,完全吃透了,但是可能你會發現對你得職業生涯沒有本質上的推動。應用層面的技術都不是...