當前位置:首頁 » 編程語言 » javalist與map

javalist與map

發布時間: 2022-09-01 08:31:59

⑴ 如何理解java中的List和Map

你可以將list看作是未住人的一排房子,房子上有門牌號,每住一個人都要給這個人分配專門的門牌號。
因為不知道名字, 我們只可以通過門牌號來找到這個人,也就是list的下標。
而map也可以將其看做成一排未住人的房子,但是住房要登記名字,一個名字就是一個人住房的位置。
那麼我就可以通過名字來找到這個人,也可以通過門牌號來找到這個人,也就是通過map的鍵來找這個值。

⑵ Java中的List和Map有什麼區別

list介面有兩個常用實現類arraylist,linkedlist他們存的元素是有序不唯一的(values)
map介面實現類hashmap存的是鍵值就是這樣(key,values)存的,他是唯一無序

⑶ java map和list的區別

List介面 繼承collection介面,Map是個頂級介面
List此介面的用戶可以對列表中每個元素的插入位置進行精確地控制。
用戶可以根據元素的整數 索引(在列表中的位置)訪問元素,並搜索列表中的元素

map將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多隻能映射到一個值

簡單的說就是list只能保存一列表;Map<k,v>能保存2列表

⑷ JAVA裡面set,map,list的區別是什麼(盡量詳細)

java集合的主要分為三種類型:

  • Set(集)

  • List(列表)

  • Map(映射)

  • 要深入理解集合首先要了解下我們熟悉的數組:

    數組是大小固定的,並且同一個數組只能存放類型一樣的數據(基本類型/引用類型),而JAVA集合可以存儲和操作數目不固定的一組數據。 所有的JAVA集合都位於 java.util包中! JAVA集合只能存放引用類型的的數據,不能存放基本數據類型。

    簡單說下集合和數組的區別:(參考文章:《Thinking In Algorithm》03.數據結構之數組)

Java所有「存儲及隨機訪問一連串對象」的做法,array是最有效率的一種。

1、
效率高,但容量固定且無法動態改變。
array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們array的容量。

2、Java中有一個Arrays類,專門用來操作array。
arrays中擁有一組static函數,
equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。
fill():將值填入array中。
sort():用來對array進行排序。
binarySearch():在排好序的array中尋找元素。
System.array():array的復制。

若撰寫程序時不知道究竟需要多少對象,需要在空間不足時自動擴增容量,則需要使用容器類庫,array不適用。所以就要用到集合。

那我們開始討論java中的集合。

集合分類:

Collection:List、Set
Map:HashMap、HashTable

⑸ java中list,set和map 的區別

List按對象進入的順序保存對象,不做排序或編輯操作。Set對每個對象只接受一次,並使用自己內部的排序方法(通常,你只關心某個元素是否屬於Set,而不關心它的順序–否則應該使用List)。Map同樣對每個元素保存一份,但這是基於」鍵」的,Map也有內置的排序,因而不關心元素添加的順序。如果添加元素的順序對你很重要,應該使用 LinkedHashSet或者LinkedHashMap. List的功能方法

實際上有兩種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,它可以返回一個子樹。

WeakHashMao : 弱鍵(weak key)Map,Map中使用的對象也被允許釋放: 這是為解決特殊問題設計的。如果沒有map之外的引用指向某個「鍵」,則此「鍵」可以被垃圾收集器回收。

IdentifyHashMap : 使用==代替equals()對「鍵」作比較的hash map。專為解決特殊問題而設計。

⑹ Java List和Map的問題

確實如題主所說。具體原因應該是數據結構上的問題。查閱HashMap底層原理的相關資料後,大家都說地天花亂墜我也看不懂。看下來我認為吧,HashMap的每一個key,它綁定了它對應value的地址,只要key保持不變,那麼指針位置也就不會改變。地址不變,在任意地方將value的值進行改變,那麼所有get(key)出來的值就跟著改變了。

利用HashMap的這個特性,可以在類和類之間設計變數池,將多個類之間共享的變數放到同一個HashMap中,類與類之間的方法調用參數使用這個變數池,這樣只要變數池裡某個變數的值在一個類中發生了改變,其他類再get這個變數時也能拿到改變後的值了。

⑺ java中list和map的區別

List中的對象按照索引位置排序,可以有重復對象,允許按照對象在集合中的索引位置檢索對象,如通過list.get(i)方式來獲得List集合中的元素。
Map中的每一個元素包含一個鍵對象和值對象,它們成對出現。鍵對象不能重復,值對象可以重復。

⑻ java list 與map有什麼區別

List:是存儲單列數據的集合,存儲的數據是有序並且是可以重復的


Map:存儲雙列數據的集合,通過鍵值對存儲數據,存儲 的數據是無序的,Key值不能重復,value值可以重復key和value是一一對應的

Collection介面

Collection是Java中最基本的集合介面。它描述了一組有關集合操作的方法。

  • int Size(); //集合大小

  • boolean isEmpty(); //是否為空

  • boolean contains(Object o); //是否包含某個對象

  • Iterator<E> iterator(); //返回一個迭代對象,用來遍歷集合中的元素

  • Object[] toArray(); //將集合中的元素以數組形式然後返回

  • <T> T[] toArray(T[] a); //上一個方法的泛型形式

  • boolean add(E e); //將對象e添加進集合,添加成功則返回true

  • boolean remove(Object o); //移除某個元素

  • boolean containsAll(Collection<?> c); //傳入一個集合c,如果c中的元素都存在,則返回true

  • boolean addAll(Collection<? extends E> c); //將集合c中的元素全部添加進本集合

  • boolean removeAll(Collection<?> c); //本集合減去c集合中的元素

  • boolean retainAll(Collection<?> c); //取本集合和c集合的交集

  • void clear(); //清空集合

  • boolean equals(Object o); //判斷相等

  • int hashCode(); //獲取集合當前的hash值

  • Set介面

    Set介面直接繼承自Collection介面,並且方法介面上也一模一樣。Set對添加的元素有一些要求,其不允許出現重復的元素,並且元素之間沒有次序。這相當於一個不允許重復的離散的集合。因此,添加進Set的元素類型需要定義equals方法。若是使用自定義的類,則應該重寫equals方法來確保實現自己需要的功能。

    Set介面主要實現了兩個類:HashSet,TreeSet。

    HashSet是按照哈希來存取元素的,因此速度較快。HashSet繼承自抽象類AbstractSet,然後實現了Set、Cloneable、Serializable介面。
    TreeSet也是繼承自AbstractSet,不過不同的是其實現的是NavigableSet介面。而NavigableSet繼承自SortedSet。SortedSet是一個有序的集合。其添加的元素必須實現了Comparable介面,因為其在添加一個元素的時候需要進行排序。NavigableSet則提供了更多的有關元素次序的方法。


  • LinkedHashSet也是Set的一個實現。和HashSet類似,只不過內部用鏈表來維護,按照元素插入次序來保存。

    List介面

    List介面也是繼承自Collection。與Set不同的是,List可以存儲重復的元素。主要有兩種實現:ArrayList和LinkedList。
    ArrayList沒有什麼好說的,就像傳統的數組一樣,有著很快的隨機存取速度,但是插入刪除的速度就很慢。
    LinkedList則與ArrayList恰恰相反,因為用鏈表來保存數據,所以插入刪除元素的速度很快,但是訪問數據的速度就不如ArrayList了。

    Map介面

    Map(映射)是一個存儲鍵值對的容器介面。每一個元素包含一個key對象和value對象,且元素不允許重復。
    Map介面的實現有以下幾個:
    HashMap是最常用的一個實現。HashMap使用hash映射來存取數據,這個速度是相當快,是O(1)的速度。其容量capacity,和負載因子load factor可以在一開始設定。當元素個數達到capacity*load factor的時候,就會進行擴容。
    LinkedHashMap和HashMap類似,只不過內部用鏈表來維護次序。因此遍歷時候的順序是其插入順序。
    TreeMap是基於紅黑樹的Map,插入的數據被有次序保存,並且有很高的效率。因此在遍歷輸出的時候可以得到排序的數據。但是這要求插入的數據實現了comparable介面。

    總結

  • Collection、Set、List和Map都是介面,不能被實例化。

  • Set和List都繼承自Collection,而Map則和Collection沒什麼關系。

  • Set和List的區別在於Set不能重復,而List可以重復。

  • Map和Set與List的區別在於,Map是存取鍵值對,而另外兩個則是保存一個元素。

希望對您有所幫助!~

⑼ java中map和list的區別

List介面 繼承collection介面,Map是個頂級介面
List此介面的用戶可以對列表中每個元素的插入位置進行精確地控制。
用戶可以根據元素的整數 索引(在列表中的位置)訪問元素,並搜索列表中的元素

map將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多隻能映射到一個值

簡單的說就是list只能保存一列表;Map<k,v>能保存2列表

⑽ Java集合中List和 Map區別

一個是存儲單列數據的集合,,另外一個是存儲鍵和值這樣的雙列數的集合,List中存儲的數據是有順序的,並且允許重復。。。Map中存儲的數據是沒有順序的,其鍵是不能重復的,它的值是可以有重復的。。。

List繼承Collection介面,,Map不繼承Collection介面。

熱點內容
搭建伺服器租用電信的怎麼樣 發布:2025-01-16 05:12:32 瀏覽:48
phpmysql源碼下載 發布:2025-01-16 05:12:31 瀏覽:210
python安裝依賴包 發布:2025-01-16 05:11:45 瀏覽:995
澳門雲主機品牌伺服器 發布:2025-01-16 05:06:55 瀏覽:768
資料庫設計主要內容 發布:2025-01-16 05:02:02 瀏覽:12
存儲過程如何修改 發布:2025-01-16 05:01:55 瀏覽:633
照片壓縮包 發布:2025-01-16 04:56:56 瀏覽:742
手機存儲用到多少最好 發布:2025-01-16 04:56:19 瀏覽:781
ftp站點不能啟動 發布:2025-01-16 04:55:31 瀏覽:54
pythonip合法性 發布:2025-01-16 04:48:52 瀏覽:75