Java.Util復(fù)習(xí)貼-創(chuàng)新互聯(lián)

參加了數(shù)次競(jìng)賽之后,我發(fā)現(xiàn)我的瓶頸所在——語(yǔ)法。于是今天來復(fù)習(xí)一下常用的Java庫(kù)函數(shù)吧。

創(chuàng)新互聯(lián)公司從2013年成立,先為平輿等服務(wù)建站,平輿等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為平輿企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

比賽中用java8還是10我就不care啦,我直看官方最新文檔。地址在 https://docs.oracle.com/javase/10/docs/api/java/util/package-summary.html

首先看到j(luò)ava.util是一個(gè)package,而java.base是一個(gè)module。我簡(jiǎn)單查了一下,據(jù)說module是在java9時(shí)候出現(xiàn)的程序結(jié)構(gòu)術(shù)語(yǔ),我沒有查到名詞解釋,從文檔里看module比package要高一個(gè)抽象級(jí)別。概念這種東西,真的有時(shí)候解釋不清楚還不如不解釋,大家意會(huì)為主吧

java.util

官方文檔里關(guān)于Java.util的解釋是:“Contains the collections framework, some internationalization support classes, a service loader, properties, random number generation, string parsing and scanning classes, base64 encoding and decoding, a bit array, and several miscellaneous utility classes. This package also contains legacy collection classes and legacy date and time classes”。從文字上看,包含的內(nèi)容很雜,很多,但是其實(shí)最主要的肯定排在最前面咯,考過雅思和GRE的同學(xué)們都懂,閱讀理解最重要的就是不需要全部讀懂,讀懂最重要的就行。我們畫重點(diǎn)的就是——collections framework!

collections framework是有tutorial的,在這里https://docs.oracle.com/javase/tutorial/collections/index.html

原來我一直以為官方文檔沒有例子很不友好,是我誤會(huì)了,還是有教程可以follow的哈。

跟著官方教程,先從interfaces走起。

interfaces

在這里插入圖片描述
借用一下官方的圖,看一下核心的collection interfaces有哪些。我們發(fā)現(xiàn)map和collection是分開放置了,但是我們發(fā)現(xiàn)圖的題目沒有把map排除在collection外面,所以往下讀,有提示:“Note also that the hierarchy consists of two distinct trees — a Map is not a true Collection.” 分開單獨(dú)一棵樹就是為了告訴大家Map不是真正意義上的Collection。那為什么不放在別的地方?(這個(gè)問題是留給我們自己的)

Collection

關(guān)于這個(gè)類,官方的介紹很簡(jiǎn)單明了:“The root interface in the collection hierarchy. A collection represents a group of objects, known as its elements. Some collections allow duplicate elements and others do not. Some are ordered and others unordered. The JDK does not provide any direct implementations of this interface: it provides implementations of more specific subinterfaces like Set and List. This interface is typically used to pass collections around and manipulate them where maximum generality is desired”。

如圖所示,collection這顆樹的根節(jié)點(diǎn),就是collection。collection用于表示一組對(duì)象——也就是他的元素。有些collection允許重復(fù)元素,有些不允許。JDK不提供這個(gè)接口(Collection)的任何直接的Implementation。這個(gè)接口通常是為了傳遞collections并在希望具有大通用性的情況下操縱他們。

Set

官方教程在這里:https://docs.oracle.com/javase/tutorial/collections/interfaces/set.html

教程里比較有用的一句話就是:“The Set interface contains only methods inherited from Collection and adds the restriction that duplicate elements are prohibited.” Set這個(gè)類只有繼承自Collection的方法而已哦,外加一個(gè)禁止重復(fù)元素的限制。 這是一個(gè)多么聽話的孩子啊,除了媽媽告訴的方法就沒有別的方法了!

比較常用的instance Method,我記下來,以便查詢

方法名用途返回值類型
size( )返回集合的元素個(gè)數(shù)int
equals( )將集合與特定元素比較,看是否相同boolean
isEmpty()判斷集合是否為空boolean
contains?(Object o)判斷集合是否包含元素oboolean
iterator()返回集合元素的IteratorIterator
toArray()返回集合元素的數(shù)組形式Object[]
toArray?(T[] a)返回集合元素的T類型數(shù)組 (我理解是輸出為我們指定的類型T)T[]
add?(E e)如果集合里沒有e元素,就添加到集合。如果集合里沒有e元素,就返回trueboolean
remove?(Object o)如果集合里存在o元素,就刪除它。如果集合里存在o元素,就返回trueboolean
containsAll?(Collectionc)判斷集合里是否包含給定集合的所有元素boolean
addAll?(Collectionc)如果給定集合的元素和集合現(xiàn)存元素有差異,添加差異元素。如有差異,返回true.(相當(dāng)于并集操作)boolean
retainAll?(Collectionc)保留與給定集合元素重合的元素,相當(dāng)于交集操作。如集合有變化,返回trueboolean
clear()清空集合所有元素void
hashCode()返回集合的hashcode,默認(rèn)是所有元素hashcode之和。空集的hashcode是0int

另有一個(gè)default method,我還沒有理解,后面實(shí)驗(yàn)一下:

方法名用途返回值
spliterator()生成一個(gè)集合元素的spliteratorSpliterator

Java平臺(tái)提供三個(gè)Set的implementation—— HashSet, TreeSet, and LinkedHashSet。 從官方的介紹來看,HashSe利用Hash table來實(shí)現(xiàn)元素存儲(chǔ),的性能最好,但是元素順序沒有保障;TreeSet用紅黑樹來實(shí)現(xiàn)元素存儲(chǔ),順序按照字母順序,比HashSet慢一些;LinkedHashSet用到hash table和linkedlist,元素按照插入順序排列,性能只比HashSet差一點(diǎn)點(diǎn)。

SortedSet我們就不細(xì)究了吧,看名字就明白特殊之處了。

List

根據(jù)官方教程:List 是一個(gè)有序的 Collection (有時(shí)也叫equence). Lists 允許元素重復(fù). 除了繼承自Collection的方法, List interface 還包含特別的訪問、搜索、輪詢、范圍視圖等。這樣難怪,因?yàn)長(zhǎng)ist還有一個(gè)媽媽,叫 Iterator。所以它比Set的背景更大。

Java平臺(tái)提供兩個(gè)implementation, 一個(gè)是ArrayList,性能比較好;另一個(gè)是 LinkedList,在某些場(chǎng)景下性能較好。

常用方法列表:

方法名用途返回值類型
add?(E e)如果集合里沒有e元素,就添加到集合。如果集合里沒有e元素,就返回trueboolean
add?(int index, E e)在index的位置插入元素evoid
addAll?(int index, Collectionc)在index的位置插入集cboolean
addAll?(Collectionc)在列表末尾添加c中的元素boolean
contains?(Object o)判斷列表是否包含元素oboolean
containsAll?(Collectionc)判斷列表里是否包含給定集的所有元素boolean
clear()情況列表的所有元素void
equals( )將列表與特定對(duì)象比較,看是否相同boolean
get?(int index)返回列表中在 index 位置的元素E
hashCode()返回列表的hashcode,默認(rèn)是所有元素hashcode之和??占膆ashcode是0int
indexOf?(Object o)返回列表中 o 的位置,如果o沒有出現(xiàn), 返回-1int
isEmpty()判斷列表是否為空boolean
iterator()返回集合元素的IteratorIterator
lastIndexOf?(Object o)返回列表中 o 最后出現(xiàn)的位置,如果o沒有出現(xiàn), 返回-1int
listIterator()返回列表的 listIterator。 ListIterator有很好的特性,可以雙向遍歷ListIterator
listIterator?(int index)返回列表的 listIterator, 從index位置開始ListIterator
remove?(int index)刪除列表中index位置的元素E
remove?(Object o)如果列表里存在o元素,就刪除它。如果列表里存在o元素,就返回trueboolean
removeAll?(Collectionc)去掉列表中存在于c集中的所有元素boolean
replaceAll?(UnaryOperator operator)將列表中的元素在指定運(yùn)算符下計(jì)算,用計(jì)算結(jié)果替換原來的元素默認(rèn)void
retainAll?(Collectionc)保留與給定集合元素重合的元素,相當(dāng)于交集操作。如集合有變化,返回trueboolean
set?(int index, E element)用 elemen t替換列表中 index 位置的元素E
size( )返回列表的元素個(gè)數(shù)int
sort?(Comparatorc)按照comparator的規(guī)則對(duì)列表元素進(jìn)行排序默認(rèn)void
spliterator()為列表元素生成一個(gè)spliteratorSpliterator
subList?(int fromIndex, int toIndex)生成一個(gè)從 fromIndex開始到 toIndex結(jié)束的子列表List
toArray()返回集合元素的數(shù)組形式Object[]
toArray?(T[] a)返回集合元素的T類型數(shù)組 (我理解是輸出為我們指定的類型T)T[]
Algorithm

在官方教程里找到了一個(gè)好東東,algorithm!https://docs.oracle.com/javase/tutorial/collections/algorithms/index.html, 這里有好多又快又好的算法捷徑,藏得好深??!

Collections的內(nèi)置函數(shù):

函數(shù)名用途返回值類型
sort( Collection e)自然排序 evoid
shuffle( Collection e )打亂順序void
reverse( List list)將list元素逆序排列void
swap(lList list, int i, int j)交換下標(biāo) i 和 j的元素的位置void
fill( List list, String str )用str填充listvoid
copy( List list1, List list2)將list2的內(nèi)容復(fù)制到list1void
binarySearch(List list, E key)返回list中key的位置,如果沒有返回 (-(insertion point) - 1)int
frequency(List list, E e)返回e元素在list中出現(xiàn)的頻率int
disjoint( List list1, List list2)判斷 list1 和 list2 是否沒有交集,沒有交集返回trueboolean
min( List list )返回list里最小的元素E
max( List list )返回list中大的元素E
Queue

官方文檔里說的很清楚,“A Queue is a collection for holding elements prior to processing”,也就是說隊(duì)列只是為了在對(duì)數(shù)據(jù)進(jìn)行處理加工之前存放元素的。所以,隊(duì)列的方法比起前面的兩個(gè)就少了很多,基本上就涉及到存取。

方法名用途返回值類型
add?(E e)如果空間允許,將e元素添加到隊(duì)列,返回true。如果超出空間限制,拋出異常boolean
element()讀取隊(duì)列的頭元素E
offer?(E e))如果空間允許,將e元素添加到隊(duì)列,返回true;不拋異常boolean
peek())讀取隊(duì)列的頭元素,如果隊(duì)列為空,返回nullE
poll()讀取并刪除隊(duì)列的頭元素,如果空隊(duì)列,返回nullE
remove()讀取并刪除隊(duì)列的頭元素E

當(dāng)然Collections的基本方法Queue也都繼承了的,還有Iterable的forEach。Queue也是個(gè)有雙親的孩子。
Queue的順序感很強(qiáng),通常是先進(jìn)先出(FIFO),也就是隊(duì)尾入隊(duì),隊(duì)首出隊(duì)。

Deque

官方文檔里說道:A linear collection that supports element insertion and removal at both ends. The name deque is short for “double ended queue” and is usually pronounced “deck”。首先,Deque是可以從兩端操作元素的Collection,然后我們就知道了它的真名,和昵稱。歷史無數(shù)次的證明,昵稱總比真名要流傳的廣。

Deque的方法比較多了,Queue有的方法我就不列了,顯得重復(fù),大家記住Queue有的,他的兄弟Deque都有就行了。下面就列出區(qū)別于Queue的方法

方法名用途返回值類型
addFirst?(E e)如果空間允許,將e元素添加到隊(duì)首。如果超出空間限制,拋出異常IllegalStateExceptionvoid
addLast?(E e)如果空間允許,將e元素添加到隊(duì)尾。如果超出空間限制,拋出異常IllegalStateExceptionvoid
contains?(Object o)判斷列表是否包含元素oboolean
descendingIterator()返回Deque的逆序IteratorIterator
getFirst()讀取deque的頭元素E
getLast()讀取deque的尾元素E
offerFirst?(E e)如果空間允許,將e元素添加到隊(duì)首。boolean
offerLast?(E e)如果空間允許,將e元素添加到隊(duì)尾。boolean
pollFirst()讀取并刪除deque的頭元素,如果是空隊(duì),返回nullE
pollLast()讀取并刪除deque的尾元素,如果是空隊(duì),返回nullE
pop()deque作為棧時(shí)的出棧操作E
push?(E e)deque作為棧時(shí)的壓棧操作,空間不允許時(shí)拋出 IllegalStateExceptionvoid
remove?(Object o)刪除 o 在deque里的最早出現(xiàn)的對(duì)應(yīng)值boolean
removeFirst()讀取并刪除deque的頭元素E
removeFirstOccurrence?(Object o)刪除 o 在deque里的最早出現(xiàn)的對(duì)應(yīng)值boolean
removeLast()讀取并刪除deque的尾元素E
removeLastOccurrence?(Object o)刪除 o 在deque里的最后出現(xiàn)的對(duì)應(yīng)值boolean
Map

根據(jù)官方的解釋,Map就是一個(gè)鍵值映射,Map的鍵自然是不能有重復(fù)的,一個(gè)Key最多只能映射到一個(gè)Value。這個(gè)讓我回想起自己前幾天做的題目,確實(shí)我當(dāng)時(shí)想著一個(gè)Key 映射到多個(gè)值呢,真的是學(xué)習(xí)不到位啊~~

前面官方文檔里也說了,Map不是真正意義上的Collection,這里官方文檔就說清楚了,Map只是提供三種Collection views:鍵,值,鍵值的映射關(guān)系。

Map的order其實(shí)比較復(fù)雜,TreeMap有明確的排序,但是HashMap就不一樣啦。 我也記得老師說過,HashMap的排序不完全時(shí)是從大到小的,有一次作業(yè)用HashMap給1到100的數(shù)字排序,就比較有意思的結(jié)果。

鍵是不可以為空的,但是一些不合法的鍵賦值操作也不一定就會(huì)拋出異常。官方文檔里說到的操作其實(shí)我都還不熟悉,沒有體會(huì),似乎可變的對(duì)象作為key會(huì)帶來很大麻煩。大家有興趣,自己去了解一下:https://docs.oracle.com/javase/10/docs/api/java/util/Map.html

值得注意的是這一條:“Some map operations which perform recursive traversal of the map may fail with an exception for self-referential instances where the map directly or indirectly contains itself. This includes the clone(), equals(), hashCode() and toString() methods. Implementations may optionally handle the self-referential scenario, however most current implementations do not do so” Map把自己作為一個(gè)value是可以的,那么就可以recursive traversal, 但是這里說到可能會(huì)異常的情況,看起來不很穩(wěn)定。留心一下,不知道以后會(huì)不會(huì)遇到這類題目啊~~

Map的一個(gè)static interface是 Map.Entry, entry就是map的鍵值對(duì)。

Map的方法好多,還有很多static的方法涉及到 Unmodifiable Map, 基于目前的菜鳥屬性,我就不去學(xué)啦,因?yàn)槲夜烙?jì)我十有八九也用不到。既然復(fù)習(xí)嗎,我們就記下來常用的insntance method

方法名用途返回值類型
clear()刪除map的所有映射void
compute?(K key, BiFunctionremappingFunction)利用remappingFunction在給定Key的基礎(chǔ)上利用舊Value計(jì)算新的Value,如果舊mapping不存在則Value為nulldefault V
computeIfAbsent?(K key, FunctionmappingFunction)當(dāng)Map中不包含給定key時(shí),利用mappingFunction生成key的mappingdefault V
computeIfPresent?(K key, BiFunctionremappingFunction在Map中包含給定key的情況下,利用remappingFunction在給定Key的基礎(chǔ)上生成新的Valuedefault V
containsKey?(Object key)如果Map包含有key的mapping,就返回trueboolean
containsValue?(Object value)如果Map包含有value的mapping,就返回trueboolean
entrySet()返回Map中所有映射的Set視圖Set>
equals?(Object o)如果o也是一個(gè)Map,而且所有mapping都相等,就返回true。相等的Map的entrySet也相等boolean
forEach?(BiConsumeraction)對(duì)所有mapping依次執(zhí)行action操作,直到輪完所有mapping或者action拋出異常default void
get?(Object key)返回對(duì)應(yīng)key的value,如果map沒有對(duì)應(yīng)的key的mapping,返回nullV
getOrDefault?(Object key, V defaultValue)返回對(duì)應(yīng)key的value,如果map沒有對(duì)應(yīng)的key的mapping,返回defaultValuedefault V
hashCode()返回Map的hashcodeint
isEmpty()如果map不包含任何鍵值映射,則返回trueboolean
keySet()返回Map的所有key的Set視圖Set
merge?(K key, V value, BiFunctionremappingFunction)如果給定的key沒有關(guān)聯(lián)到任何value或者關(guān)聯(lián)到null值,則映射到remappingFunction算出的valuedefault V
put?(K key, V value)建立key和value的映射V
putAll?(Mapm)從給定map復(fù)制所有映射void
putIfAbsent?(K key, V value)如果給定的key還沒有關(guān)聯(lián)到value,或者映射到null,則將其關(guān)聯(lián)到給定的value,并返回null。否則,返回當(dāng)前的映射value.V
remove?(Object key)如果key的映射存在,則將其刪除V
remove?(Object key, Object value)當(dāng)且僅當(dāng)key和value的映射存在時(shí)(返回true)將其刪除default boolean
replace?(K key, V value)當(dāng)且僅當(dāng)包含key的映射存在時(shí)將其value替換default V
replace?(K key, V oldValue, V newValue)當(dāng)且僅當(dāng)包含key的映射存在時(shí)(返回true)將oldValue替換成newValuedefault boolean
replaceAll?(BiFunctionfunction)使用function替換每一個(gè)entry的value,直到所有entry都被替換或者function拋出異常void
size()返回map中鍵值映射的數(shù)量int
values()返回map中所有value的Collection視圖Collection

復(fù)習(xí)內(nèi)容大致就這么多。準(zhǔn)備多多練習(xí),希望可以在下一次Leetcode的比賽中簽到成功。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)頁(yè)名稱:Java.Util復(fù)習(xí)貼-創(chuàng)新互聯(lián)
當(dāng)前URL:http://www.muchs.cn/article40/hgoho.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、定制網(wǎng)站品牌網(wǎng)站建設(shè)、動(dòng)態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計(jì)、定制開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化