當前位置:成語大全網 - 漢語詞典 - java集合和列表的區別

java集合和列表的區別

用java設定?地圖?列表的區別:

都是集合接口嗎?

簡要描述

設置?-值不允許重復,數據結構無序。

list——其中的值允許重復,因為它是壹個有序的數據結構。

Map-paired數據結構,鍵值必須唯壹(鍵不能相同,否則值會被替換)?

List按對象進入的順序保存對象,不進行排序或編輯。Set只接受每個對象壹次,並使用自己的內部排序方法(通常,妳只關心壹個元素是否屬於Set,而不是它的順序——否則妳應該使用List)。Map也為每個元素保存壹個副本,但這是基於“鍵”的,Map也有內置的排序,所以它不關心元素添加的順序。如果添加元素的順序對您很重要,您應該使用?LinkedHashSet或LinkedHashMap

列表的函數方法

榜單其實有兩種:?壹個是基本的ArrayList,有隨機訪問元素的優勢,另壹個是更強大的LinkedList,不是為快速隨機訪問設計的,但是有更通用的方法。

列表?:?順序是List最重要的特性:它保證維護元素的特定順序。List向集合中添加了許多方法,這使得在列表中間插入和移除元素成為可能(這僅推薦用於LinkedList。)列表可以生成ListIterator,可以用來從兩個方向遍歷列表,從列表中間插入和刪除元素。

數組列表?:?由數組實現的列表。允許快速隨機訪問元素,但是在列表中間插入和移除元素會很慢。ListIterator應該只用於從後向前遍歷ArrayList,而不是插入和移除元素。因為那比LinkedList貴多了。

LinkedList?:?順序訪問得到優化,鏈表中間插入和刪除的開銷都不大。隨機訪問相對較慢。(改用ArrayList。)也有以下方法:addFirst(),?addLast(),?getFirst(),?getLast(),?removeFirst()?和removeLast(),?這些方法?(未在任何接口或基類中定義)允許LinkedList用作堆棧、隊列和雙向隊列。

集合的函數方法

Set和Collection有完全壹樣的接口,所以它沒有任何額外的功能,不像前兩個不同的List。其實Set就是集合,只是行為不同而已。這是繼承和多態的典型應用:表達不同的行為。)Set不保存重復元素(至於如何判斷相同元素,比較負責)

設置?:?存儲在集合中的每個元素必須是唯壹的,因為集合不保存重復的元素。添加到集合中的元素必須定義equals()方法,以確保對象的唯壹性。集合和集合具有完全相同的接口。Set接口不保證保持元素的順序。

HashSet?:?為快速查找而設計的設置。存儲在HashSet中的對象必須定義hashCode()。

TreeSet?:?設置保存順序,?底層是樹形結構。用它從集合中提取壹個有序序列。

LinkedHashSet?:?具有HashSet的查詢速度,內部使用鏈表維護元素的順序(插入順序)。所以當叠代器用於遍歷集合時,結果將按照元素插入的順序顯示。

地圖的功能方法

方法put(對象?關鍵,?對象?Value)添加壹個“值”(妳想要的)和壹個與“值”關聯的“鍵”(用它來找)。

方法get(對象?Key)返回與給定鍵相關聯的值。可以使用containsKey()和containsValue()來測試映射是包含“鍵”還是“值”。標準的Java類庫包含了幾種不同的映射:hashmap、?樹狀圖?LinkedHashMap,?WeakHashMap,?IdentityHashMap .它們都有相同的基本接口圖,但在行為、效率、排序策略、保存對象的生命周期和判斷鍵的等價性方面有所不同。

執行效率是Map的壹大問題。看看get()要做什麽,妳就明白為什麽在ArrayList中搜索“key”相當慢了。這就是HashMap加速的地方。HashMap使用壹個特殊的值,叫做“哈希碼”(hash?代碼)來代替緩慢的鍵搜索。“哈希碼”是“相對唯壹的”表示對象的int值,它是通過變換對象的壹些信息而產生的。所有Java對象都可以生成哈希代碼,因為hashCode()是在基類對象中定義的方法。

HashMap使用對象的hashCode()進行快速查詢。這種方法可以顯著提高性能。

地圖?:?維護“鍵值對”的關聯性,這樣就可以通過“鍵”找到“值”

HashMap?:?基於哈希表的映射實現。插入和查詢“鍵值對”的成本是固定的。您可以通過構造函數設置容量和加載因子load。調整容器性能的系數。

LinkedHashMap?:?它類似於HashMap,但是在遍歷它時,獲得“鍵值對”的順序是它的插入順序或最近最少使用(LRU)的順序。只比HashMap慢壹點。它在叠代訪問中速度更快,因為它使用鏈表來維護內部順序。

樹狀圖?:?基於紅黑樹的數據結構的實現。當查看“鍵”或“鍵值對”時,它們被排序(順序由Comparabel或Comparator決定)。TreeMap的特點是妳得到的結果是排序的。TreeMap是唯壹具有subMap()方法的映射,它可以返回壹個子樹。

WeakHashMao?:?弱鍵(弱?Key)地圖,地圖中使用的對象也允許釋放:?這是為解決特殊問題而設計的。如果除了映射到壹個“鍵”之外沒有其他引用,該“鍵”可以被垃圾收集器回收。

IdentifyHashMap?:?用= =代替equals()比較“鍵”的哈希?地圖.旨在解決特殊問題。

List接口只是擴展了集合,其具體實現類壹般包括ArrayList和LinkedList。妳可以把任何東西放進壹個列表容器,需要的時候拿出來。ArrayList從名字就可以看出,它是以類數組的形式存儲的,所以它的隨機訪問速度極快,而LinkedList的內部實現是鏈表,適合鏈表中間頻繁的插入和刪除。具體應用中可以根據自己的需求自由選擇。上面提到的叠代器只能向前遍歷容器,而ListIterator繼承了叠代器的思想,提供了雙向遍歷列表的方法。

集合接口也是集合的擴展。與List不同,Set中的object元素不能重復,這意味著不能將相同的內容放入同壹個Set容器中兩次。其常見的具體實現是HashSet和TreeSet類。HashSet可以快速定位壹個元素,但是妳放在HashSet中的對象需要實現hashCode()方法,這個方法使用上面提到的哈希代碼算法。TreeSet將放入其中的元素按順序存儲,這就要求妳放入其中的對象是可排序的,這就使用了集合框架提供的另外兩個實用類Comparable和Comparator。如果壹個類是可排序的,它應該實現Comparable接口。有時候多個類有相同的排序算法,所以沒必要每次都定義相同的排序算法,實現比較器接口就行了。集合框架中還有兩個有用的公共類:集合和數組。Collections為排序、復制、搜索和填充集合容器提供了壹些非常有用的方法,而Arrays為壹個數組做類似的操作。

Map是將key對象與value對象關聯起來的容器,value對象可以是Map,以此類推,這樣就可以形成多層次的映射。對於關鍵對象,像Set,Map容器中的關鍵對象不允許重復,以保持搜索結果的壹致性;如果有兩個key對象是相同的,那麽當妳想得到那個key對象對應的value對象的時候就有問題了。可能妳沒有得到妳想要的值對象,會導致混亂,所以鍵的唯壹性很重要,符合集合的性質。當然,在使用過程中,壹個鍵對應的value對象可能會發生變化,然後會根據最後修改的value對象來對應這個鍵。值對象沒有唯壹性要求。妳可以把任意數量的鍵映射到壹個值對象上,這樣不會有什麽問題(但是可能會給妳的使用帶來不便,妳也不知道妳得到的是什麽值對象)。Map有兩種常見的實現:HashMap和TreeMap。HashMap也是用哈希碼算法快速找到壹個鍵,而TreeMap是按順序存儲鍵的,所以它有壹些擴展的方法,比如firstKey(),lastKey()等。您還可以從TreeMap中指定壹個範圍來獲取其子映射。鍵和值的關聯非常簡單,使用pub(Object?關鍵,對象?Value)方法可以將壹個鍵與壹個值對象相關聯。使用get(Object?Key)可以得到這個key對象對應的value對象。