導航:首頁 > 編程語言 > javaset介面

javaset介面

發布時間:2024-06-07 00:35:50

java中List、Set、Map介面之間的區別和聯系

List 用於遍歷一個數組時效率最高;比如在循環顯示所有信息時經常用到;
Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象;雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。 Map 就是鍵值對map(鍵,值),鍵是Sting 類型 值是Object (對象類型),所以在知道某條信息的一項時查詢其他項就用該方法,效率最高!(以上個人見解!)
詳細:數組和其它容器的區別主要有三方面:效率,類型,和保存基本類型的能力.在Java中,數組是一種效率很高的存儲和隨機訪問對象引用序列的方式.數組是一 個簡單的線性序列,因此訪問速度很快,但也損失了其它一些特性.創建一個數組對象後,大小就固定了,如果空間不夠,通常是再創建一個數組,然後把舊數組中 的所有引用移到新數組中.數組可可以保存基本類型,容器不行.
容器類不以具體的類型來處理對象,而是將所有的對象都以Object類型來處理,所以我們可以只創建一個容器,任意的Java對象都可以放進去.容器類可 以使用包裝類(Integer,Double等),以便把基本類型放入其中. List Set Map 都可以自動調整容量,數組不能.

Collection表示一組對象,這些對象也稱為collection的元素。一些 collection允許有重復的元素,而另一些則不允許。一些collection是有序的,而另一些則是無序的。JDK中不提供此介面的任何直接實 現,它提供更具體的子介面(如 Set 和 List)實現.

Map 將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多隻能映射一個值.Map 介面提供三種collection視圖,允許以鍵集、值集合或鍵值映射關系集的形式查看某個映射的內容。某些映射實現可明確保證其順序,如 TreeMap(有序) 類;某些映射實現則不保證順序,如 HashMap(無序) 類。Map可以像數組那樣擴展成多維數組,只要把每個值也做成一個Map就行了.

Collection和Map是Java容器中的兩種基本類型. 區別在於容器中每個位置保存的元素個數.Collection每個位置只能保存一個元素,包括List和Set.其中List以進入的順序保存一組元素; 而Set中的元素不能重復.ArrayList是一種List,HashSet是一種Set,將元素添加入任意Collection都可以使用add() 方法.Map保存的是健值對.使用put()為Map添加元素,它需要一個健和一個值作參數.

ArrayList和LinkedList都實現了List介面,ArrayList底層由數組支持LinkedList由雙向鏈表支持,因此,如果經常在表中插入或刪除元素LinkedList比較適合,如果經常查詢ArrayList比較適合.
Set的實現有TreeSet,HashSet,LinkedHashSet,HashSet查詢速度最快,LinkedHashSet保持元素插入次序,TreeSet基於TreeMap,生成一個總是處於排序狀態的Set.

Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet

Vector : 基於Array的List,其實就是封裝了Array所不具備的一些功能方便我們使用,它不可能走入Array的限制。性能也就不可能超越Array。所以,在可能的情況下,我們要多運用Array。另外很重要的一點就是Vector「sychronized」的,這個也是Vector和ArrayList的唯一的區別。

ArrayList:同Vector一樣是一個基於Array上的鏈表,但是不同的是ArrayList不是同步的。所以在性能上要比Vector優越一些,但是當運行到多線程環境中時,可需要自己在管理線程的同步問題。

LinkedList:LinkedList不同於前面兩種List,它不是基於Array的,所以不受Array性能的限制。它每一個節點(Node)都包含兩方面的內容:1.節點本身的數據(data);2.下一個節點的信息(nextNode)。所以當對LinkedList做添加,刪除動作的時候就不用像基於Array的List一樣,必須進行大量的數據移動。只要更改nextNode的相關信息就可以實現了。這就是LinkedList的優勢。

List總結:

1. 所有的List中只能容納單個不同類型的對象組成的表,而不是Key-Value鍵值對。例如:[ tom,1,c ];

2. 所有的List中可以有相同的元素,例如Vector中可以有 [ tom,koo,too,koo ];

3. 所有的List中可以有null元素,例如[ tom,null,1 ];

4. 基於Array的List(Vector,ArrayList)適合查詢,而LinkedList(鏈表)適合添加,刪除操作。

HashSet:雖然Set同List都實現了Collection介面,但是他們的實現方式卻大不一樣。List基本上都是以Array為基礎。但是Set則是在HashMap的基礎上來實現的,這個就是Set和List的根本區別。HashSet的存儲方式是把HashMap中的Key作為Set的對應存儲項。看看HashSet的add(Object obj)方法的實現就可以一目瞭然了。

public boolean add(Object obj)
{
return map.put(obj, PRESENT) == null;
}

這個也是為什麼在Set中不能像在List中一樣有重復的項的根本原因,因為HashMap的key是不能有重復的。

LinkedHashSet:HashSet的一個子類,一個鏈表。

TreeSet:SortedSet的子類,它不同於HashSet的根本就是TreeSet是有序的。它是通過SortedMap來實現的。

Set總結:

1. Set實現的基礎是Map(HashMap);

2. Set中的元素是不能重復的,如果使用add(Object obj)方法添加已經存在的對象,則會覆蓋前面的對象;

http://user.qzone.qq.com/530536333/blog/1283866146

List介面對Collection進行了簡單的擴充,它的具體實現類常用的有ArrayList和LinkedList。你可以將任何東西放到一個List容器中,並在需要時從中取出。ArrayList從其命名中可以看出它是一種類似數組的形式進行存儲,因此它的隨機訪問速度極快,而LinkedList的內部實現是鏈表,它適合於在鏈表中間需要頻繁進行插入和刪除操作。在具體應用時可以根據需要自由選擇。前面說的Iterator只能對容器進行向前遍歷,而ListIterator則繼承了Iterator的思想,並提供了對List進行雙向遍歷的方法。

Set介面也是Collection的一種擴展,而與List不同的時,在Set中的對象元素不能重復,也就是說你不能把同樣的東西兩次放入同一個Set容器中。它的常用具體實現有HashSet和TreeSet類。HashSet能快速定位一個元素,但是你放到HashSet中的對象需要實現hashCode()方法,它使用了前面說過的哈希碼的演算法。而TreeSet則將放入其中的元素按序存放,這就要求你放入其中的對象是可排序的,這就用到了集合框架提供的另外兩個實用類Comparable和Comparator。一個類是可排序的,它就應該實現Comparable介面。有時多個類具有相同的排序演算法,那就不需要在每分別重復定義相同的排序演算法,只要實現Comparator介面即可。集合框架中還有兩個很實用的公用類:Collections和Arrays。Collections提供了對一個Collection容器進行諸如排序、復制、查找和填充等一些非常有用的方法,Arrays則是對一個數組進行類似的操作。

Map是一種把鍵對象和值對象進行關聯的容器,而一個值對象又可以是一個Map,依次類推,這樣就可形成一個多級映射。對於鍵對象來說,像Set一樣,一個Map容器中的鍵對象不允許重復,這是為了保持查找結果的一致性;如果有兩個鍵對象一樣,那你想得到那個鍵對象所對應的值對象時就有問題了,可能你得到的並不是你想的那個值對象,結果會造成混亂,所以鍵的唯一性很重要,也是符合集合的性質的。當然在使用過程中,某個鍵所對應的值對象可能會發生變化,這時會按照最後一次修改的值對象與鍵對應。對於值對象則沒有唯一性的要求。你可以將任意多個鍵都映射到一個值對象上,這不會發生任何問題(不過對你的使用卻可能會造成不便,你不知道你得到的到底是那一個鍵所對應的值對象)。Map有兩種比較常用的實現:HashMap和TreeMap。HashMap也用到了哈希碼的演算法,以便快速查找一個鍵,TreeMap則是對鍵按序存放,因此它便有一些擴展的方法,比如firstKey(),lastKey()等,你還可以從TreeMap中指定一個范圍以取得其子Map。鍵和值的關聯很簡單,用pub(Object key,Object value)方法即可將一個鍵與一個值對象相關聯。用get(Object key)可得到與此key對象所對應的值對象。

⑵ java 關於集合Set介面的實現類中 元素相等的問題

HashSet確實是靠hashcode來運算出這個元素應該存放在什麼地方。
但是不同的對象,hashcode也可能會相同。
這時就發生了沖突,需要再次比較發生沖突的兩個或多個元素是否相同(通過equals方法)。
如果相同添加失敗,如果不同添加成功。

為什麼不直接用equals比較是否相同?
因為不知道該跟哪個元素比較啊,難不成遍歷整個Set來比較?
如果有一萬個元素呢,那麼將會很費時間。
而先算出hashcode在比較有個好處。

只要hashcode不同,則可以確定元素不同。只有hashcode相同的情況下,元素才有可能相同。

hashcode的性質:
如果兩個元素相同,那麼其hashcode必定相同。
如果兩個元素不同,那麼不要求其hashcode一定不同。(但是如果不同的元素盡量能返回不同的hashcode,那麼將有助於提高HashSet的性能)

⑶ 在java中集合List,Set,Map,Properties的區別

List介面悶渣是有序的Collection,使用此介面能夠精確的控制每個元素插入的位或罩纖置。
Set介面:定義一個不包含重復元素的規則。衫仿添加時候是沒有順序的。
Map介面:將鍵映射到值。一個映射不能包含重復的鍵,每個鍵最多隻能映射到一個值。
Properties類是HashTable(實現了Map介面)的子類。HashTable是同步的。

⑷ 怎樣從java集合類set中取出數據

創建set的iterator方法:

Set<Object> set = new HashSet<Object>();

Iterator<Object> it = set.iterator();

while(it.hasNext())//判斷是否有下一個

it.next()取出元素。

以上方法便是從Set集合中取出數據。

(4)javaset介面擴展閱讀:

Java中使用Set介面描述一個集合(集合不允許有「重復值」,注意重復的概念),集合Set是Collection的子介面,Set不允許其數據元素重復出現,也就是說在Set中每一個數據元素都是唯一的。Set介面定義的常用方法如下:

1、size() 獲取Set尺寸(即Set包含數據元素的總數)。

2、 add(Object obj) 向Set中添加數據元素obj。

3、remove(Object obj) 從Set中移除數據元素obj。

4 、contains(Object obj) 判斷當前Set中是否包含數據元素obj,如果包含返回true,否則返回false。

5、iterator() 將Set裝入迭代器。

⑸ java set 順序

在java語言中,提供多種不同的結構來組織對象,Set(集合)是其中的一種,本身是一個介面,其迭代時的順序取決於其具體實現。典型的實現包括:

HashSet:哈希表是通過使用稱為散列法的機制來存儲信息的,元素並沒有以某種特定順序來存放;

LinkedHashSet:以元素插入的順序來維護集合的鏈接表,允許以插入的順序在集合中迭代;

TreeSet:提供一個使用樹結構存儲Set介面的實現,對象以升序順序存儲,訪問和遍歷的時間很快。

(5)javaset介面擴展閱讀

Set<String> set = new TreeSet<String>();

set.add("f");

set.add("a");

set.add("b");

set.add("c");

set.add("d");

set.add("e");

System.out.println(set);

閱讀全文

與javaset介面相關的資料

熱點內容
esxi啟動虛擬機命令 瀏覽:969
軍工級單片機 瀏覽:113
伺服器安全保護是什麼意思 瀏覽:789
刪除運行命令 瀏覽:720
龍之召喚伺服器如何 瀏覽:119
linux目錄跳轉 瀏覽:368
程序員和老闆稱兄道弟 瀏覽:759
直播網路連接源碼 瀏覽:736
用安卓手機怎麼登錄蘋果手機id 瀏覽:710
論文查重工具源碼 瀏覽:401
android銀聯demo 瀏覽:86
智能演算法發展 瀏覽:351
房車露營地用什麼app 瀏覽:70
spark編程指南python 瀏覽:553
phparray源碼 瀏覽:1002
安卓手機反應有點慢怎麼辦 瀏覽:705
c語言怎麼訪問伺服器並獲取數據 瀏覽:114
怎麼下載三維app 瀏覽:77
把pdf中的圖片導出到excel 瀏覽:505
php操作redis實例 瀏覽:143