Java中的Set、List、Map的用法與差別引見。本站提示廣大學習愛好者:(Java中的Set、List、Map的用法與差別引見)文章只能為提供參考,不一定能成為您想要的結果。以下是Java中的Set、List、Map的用法與差別引見正文
Collection 接口 :Collection是最根本的聚集接口,聲清楚明了實用於JAVA聚集(只包含Set和List)的通用辦法。Set和List都繼續了Conllection,Map
Collection接口的辦法:
boolean add(Object o):向聚集中參加一個對象的援用
void clear():刪除聚集中一切的對象,即不再持有這些對象的援用
boolean isEmpty():斷定聚集能否為空
boolean contains(Object o):斷定聚集中能否持有特定對象的援用
Iterartor iterator():前往一個Iterator對象,可以用來遍歷聚集中的元素
boolean remove(Object o):從聚集中刪除一個對象的援用
int size():前往聚集中元素的數量
Object[] toArray():前往一個數組,該數組中包含聚集中的一切元素
關於:Iterator() 和toArray() 辦法都用於聚集的一切的元素,前者前往一個Iterator對象,後者前往一個包括聚集中一切元素的數組。
Iterator接口聲清楚明了以下辦法:
hasNext():斷定聚集中元素能否遍歷終了,假如沒有,就前往true
next():前往下一個元素
remove():從聚集中刪除上一個有next()辦法前往的元素。
Set(聚集):Set是最簡略的一種聚集。聚集中的對象不按特定的方法排序,而且沒有反復對象。Set接口重要完成了兩個完成類:
HashSet:HashSet類依照哈希算法來存取聚集中的對象,存取速度比擬快
TreeSet:TreeSet類完成了SortedSet接口,可以或許對聚集中的對象停止排序。
Set的用法:寄存的是對象的援用,沒有反復對象
Set set=new HashSet(); String s1=new String("hello"); String s2=s1; String s3=new String("world"); set.add(s1); set.add(s2); set.add(s3);
System.out.println(set.size());//打印聚集中對象的數量為 2。
Set 的 add()辦法是若何斷定對象能否曾經寄存在聚集中?
boolean isExists=false; Iterator iterator=set.iterator(); while(it.hasNext()) { String oldStr=it.next(); if(newStr.equals(oldStr)){ isExists=true; } }
List(列表):List的特點是其元素以線性方法存儲,聚集中可以寄存反復對象。
List接口重要完成類包含:
ArrayList() : 代表長度可以轉變得數組。可以對元素停止隨機的拜訪,向ArrayList()中拔出與刪除元素的速度慢。
LinkedList(): 在完成中采取鏈表數據構造。拔出和刪除速度快,拜訪速度慢。
關於List的隨機拜訪來講,就是只隨機來檢索位於特定地位的元素。 List 的 get(int index)辦法放回聚集中由參數index指定的索引地位的對象,下標從“0” 開端。最根本的兩種檢索聚集中的一切對象的辦法:
1:for輪回和get()辦法:
for(int i=0; i<list.size();i++){ System.out.println(list.get(i)); }
2:應用迭代器(Iterator):
Iterator it=list.iterator(); while(it.hashNext){ System.out.println(it.next); }
Map(映照): Map是一種把鍵對象和值對象映照的聚集,它的每個元素都包括一對鍵對象和值對象。
Map沒有繼續於Collection接口 從Map聚集中檢索元素時,只需給出鍵對象,就會前往對應的值對象。
Map 的經常使用辦法:
1 添加,刪除操作:
Object put(Object key, Object value): 向聚集中參加元素
Object remove(Object key): 刪除與KEY相干的元素
void putAll(Map t): 未來自特定映像的一切元素添加給該映像
void clear():從映像中刪除一切映照
2 查詢操作:
Object get(Object key):取得與症結字key相干的值 。Map聚集中的鍵對象不許可反復,也就說,隨意率性兩個鍵對象經由過程equals()辦法比擬的成果都是false.,然則可以將隨意率性多個鍵獨享映照到統一個值對象上。
Conllections:聚集適用類 。Conllections供給了供JAVA聚集適用的靜態辦法
總結:
JAVA聚集的根本用法,都歸結了,下面這些是平凡最經常使用的JAVA聚集,詳細的其他的,還要參考JDK贊助文檔了,呵呵 關於 Map的運用,還有許多,詳細就是這個,Conllections供給了許多 List /Map 適用的辦法,對平凡開辟異常有效。
boolean containsKey(Object key): 斷定映像中能否存在症結字key
boolean containsValue(Object value):斷定映像中能否存在值value
int size():前往以後映像中映照的數目
boolean isEmpty() :斷定映像中能否有任何映照
List按對象進入的次序保留對象,不做排序或編纂操作。Set對每一個對象只接收一次,並應用本身外部的排序辦法(平日,你只關懷某個元素能否屬於 Set,而不關懷它的次序--不然應當應用List)。
Map異樣對每一個元素保留一份,但這是基於"鍵"的,Map也有內置的排序,因此不關懷元素添加的 次序。假如添加元素的次序對你很主要,應當應用 LinkedHashSet或許LinkedHashMap.
List的功效辦法:
現實上有兩種:一種是根本的ArrayList,其長處在於隨機拜訪元素,另外一種是更壯大的LinkedList,它其實不是為疾速隨機拜訪設計的,而是具有一套更通用的辦法。
List:順序是List最主要的特色:它包管保護元素特定的次序。List為Collection添加了很多辦法,使得可以或許向List中央拔出與移除元素(這只推 薦LinkedList應用。)一個List可以生成ListIterator,應用它可以從兩個偏向遍歷List,也能夠從List中央拔出和移除元素。
ArrayList:由數組完成的List。許可對元素停止疾速隨機拜訪,然則向List中央拔出與移除元素的速度很慢。ListIterator只應當用情由後向前遍歷 ArrayList,而不是用來拔出和移除元素。由於那比LinkedList開支要年夜許多。
LinkedList:對次序拜訪停止了優化,向List中央拔出與刪除的開支其實不年夜。隨機拜訪則絕對較慢。(應用ArrayList取代。)還具有以下方 法:addFirst(), addLast(), getFirst(), getLast(), removeFirst() 和 removeLast(), 這些辦法 (沒有在任何接口或基類中界說過)使得LinkedList可以看成客棧、隊列和雙向隊列應用。
Set的功效辦法:
Set具有與Collection完整一樣的接口,是以沒有任何額定的功效,不像後面有兩個分歧的List。現實上Set就是Collection,只 是行動分歧。(這是繼續與多態思惟的典范運用:表示分歧的行動。)Set不保留反復的元素(至於若何斷定元素雷同則較為擔任)
Set : 存入Set的每一個元素都必需是獨一的,由於Set不保留反復元素。參加Set的元素必需界說equals()辦法以確保對象的獨一性。Set與Collection有完整一樣的接口。Set接口不包管保護元素的順序。
HashSet:為疾速查找設計的Set。存入HashSet的對象必需界說hashCode()。
TreeSet:保留順序的Set, 底層為樹構造。應用它可以從Set中提取有序的序列。
LinkedHashSet:具有HashSet的查詢速度,且外部應用鏈表保護元素的次序(拔出的順序)。因而在應用迭代器遍歷Set時,成果會按元素拔出的順序顯示。
Map的功效辦法:
辦法put(Object key, Object value)添加一個“值”(想要得器械)和與“值”相干聯的“鍵”(key)(應用它來查找)。辦法get(Object key)前往與給定“鍵”相干聯的“值”。可以用containsKey()和containsValue()測試Map中能否包括某個“鍵”或“值”。
尺度的Java類庫中包括了幾種分歧的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它們都有異樣的根本接口Map,然則行動、效力、排序戰略、保留對象的性命周期和剖斷“鍵”等價的戰略等各不雷同。
履行效力是Map的一個年夜成績。看看get()要做哪些事,就會明確為何在ArrayList中搜刮“鍵”是相當慢的。而這恰是HashMap進步速 度的處所。HashMap應用了特別的值,稱為“散列碼”(hash code),來代替對鍵的遲緩搜刮。
“散列碼”是“絕對獨一”用以代表對象的int值,它是經由過程將該對象的某些信息停止轉換而生成的。一切Java對象都能發生散列碼,由於hashCode()是界說在基類Object中的辦法。
HashMap就是應用對象的hashCode()停止疾速查詢的。此辦法可以或許明顯進步機能。
Map : 保護“鍵值對”的聯系關系性,使你可以經由過程“鍵”查找“值”
HashMap:Map基於散列表的完成。拔出和查詢“鍵值對”的開支是固定的。可以經由過程結構器設置容量capacity和負載因子load factor,以調劑容器的機能。
LinkedHashMap:相似於HashMap,然則迭代遍歷它時,獲得“鍵值對”的次序是其拔出順序,或許是比來起碼應用(LRU)的順序。只比HashMap慢一點。而在迭代拜訪時發而更快,由於它應用鏈表保護外部順序。
TreeMap :基於紅黑樹數據構造的完成。檢查“鍵”或“鍵值對”時,它們會被排序(順序由Comparabel或Comparator決議)。TreeMap的特色在 於,你獲得的成果是經由排序的。TreeMap是獨一的帶有subMap()辦法的Map,它可以前往一個子樹。
WeakHashMap :弱鍵(weak key)Map,Map中應用的對象也被許可釋放: 這是為處理特別成績設計的。假如沒有map以外的援用指向某個“鍵”,則此“鍵”可以被渣滓搜集器收受接管。
IdentifyHashMap:應用==取代equals()對“鍵”作比擬的hash map。專為處理特別成績而設計。