Set List Map儲存方式個各有什麼不同

2021-04-23 04:00:12 字數 1355 閱讀 3589

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物件所對應的值物件。

堆 棧 動態儲存方式 靜態儲存方式

動態儲存方式 所謂動態儲存方式是指在程式執行期間根據需要進行動態的分配儲存空間的方式。動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放。典型的例子是函式的形式引數,在函式定義時並不給形參分配儲存單元,只是在函式被呼叫時,才予以分配,呼叫函式完畢立即釋放。如果乙個函式被多次呼叫...

堆 棧 動態儲存方式 靜態儲存方式

熱度 3 已有 358 次閱讀 2011 1 14 00 32 動態儲存方式 所謂動態儲存方式是指在程式執行期間根據需要進行動態的分配儲存空間的方式。動態儲存變數是在程式執行過程中,使用它時才分配儲存單元,使用完畢立即釋放。典型的例子是函式的形式引數,在函式定義時並不給形參分配儲存單元,只是在函式被...

動態儲存方式和靜態儲存方式

從變數的作用域的角度來觀察,變數可以分為全域性變數和區域性變數 從變數值存在的時間 即生存期 觀察,變數的儲存有兩種不同的方式 靜態儲存方式和動態儲存方式 使用者區程式區 靜態儲存區 動態儲存區 資料存放在靜態儲存區和動態儲存區 靜態儲存區 全域性變數全部儲存在靜態儲存區 程式開始執行時給全域性變數...