本文目錄一覽:
北大青鳥設計培訓:Java中最常用的集合類框架?
一、HashMap的概述 HashMap可以說是Java中最常用的集合類框架之一,是Java語言中非常典型的數據結構。
HashMap是基於哈希表的Map介面實現的,此實現提供所有可選的映射操作。
青島電腦培訓發現存儲的是對的映射,允許多個null值和一個null鍵。
但此類不保證映射的順序,特別是它不保證該順序恆久不變。
除了HashMap是非同步以及允許使用null外,HashMap類與Hashtable大致相同。
此實現假定哈希函數將元素適當地分布在各桶之間,可為基本操作(get和put)提供穩定的性能。
迭代collection視圖所需的時間與HashMap實例的「容量」(桶的數量)及其大小(鍵-值映射關係數)成比例。
所以,如果迭代性能很重要,則不要將初始容量設置得太高(或將載入因子設置得太低)。
HashMap的實例有兩個參數影響其性能:初始容量和載入因子。
容量是哈希表中桶的數量,初始容量只是哈希表在創建時的容量。
載入因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度。
當哈希表中的條目數超出了載入因子與當前容量的乘積時,則要對該哈希表進行rehash操作(即重建內部數據結構),從而哈希表將具有大約兩倍的桶數。
通常,默認載入因子(0.75)在時間和空間成本上尋求一種折衷。
載入因子過高雖然減少了空間開銷,但同時也增加了查詢成本(在大多數HashMap類的操作中,包括get和put操作,都反映了這一點)。
在設置初始容量時應該考慮到映射中所需的條目數及其載入因子,以便最大限度地減少rehash操作次數。
如果初始容量大於最大條目數除以載入因子,則不會發生rehash操作。
注意,此實現不是同步的。
如果多個線程同時訪問一個HashMap實例,而其中至少一個線程從結構上修改了列表,那麼它必須保持外部同步。
這通常是通過同步那些用來封裝列表的對象來實現的。
但如果沒有這樣的對象存在,則應該使用{@linkCollections#synchronizedMapCollections.synchronizedMap}來進行「包裝」,該方法最好是在創建時完成,為了避免對映射進行意外的非同步操作。
Mapm=Collections.synchronizedMap(newHashMap(…)); 二、構造函數HashMap提供了三個構造函數:HashMap():構造一個具有默認初始容量(16)和默認載入因子(0.75)的空HashMap。
HashMap(intinitialCapacity):構造一個帶指定初始容量和默認載入因子(0.75)的空HashMap。
HashMap(intinitialCapacity,floatloadFactor):構造一個帶指定初始容量和載入因子的空HashMap。
這裡提到了兩個參數:初始容量,載入因子。
這兩個參數是影響HashMap性能的重要參數,其中容量表示哈希表中桶的數量,初始容量是創建哈希表時的容量,載入因子是哈希表在其容量自動增加之前可以達到多滿的一種尺度,它衡量的是一個散列表的空間的使用程度,負載因子越大表示散列表的裝填程度越高,反之愈小。
對於使用鏈表法的散列表來說,查找一個元素的平均時間是O(1+a),因此如果負載因子越大,對空間的利用更充分,然而後果是查找效率的降低;如果負載因子太小,那麼散列表的數據將過於稀疏,對空間造成嚴重浪費。
系統默認負載因子為0.75,一般情況下我們是無需修改的。
HashMap是一種支持快速存取的數據結構,要了解它的性能必須要了解它的數據結構。
java集合框架是什麼意思
java集合框架是為表示和操作集合而規定的一種統一的標準的體系結構,任何集合框架都包含三大塊內容,分別是對外的介面、介面的實現和對集合運算的演算法。
北大青鳥java培訓:Java集合類框架的基本介面有哪些?
在JAVA開發中框架給我們提供了很多方便的介面,但是介面到底是什麼呢?在開發中又起到了什麼作用呢,這就是java課程今天需要了解的! 一.為什麼要使用介面 假如有一個需求:要求實現防盜門的功能。
門有」開」和」關」的功能,鎖有」上鎖」和」開鎖」的功能。
分析:首先防盜門是一個門,門有開門和關門的功能,還有一把鎖,鎖有開鎖和上鎖,按照面向對象的編程的思想,我們會將門和鎖都作為一個類而單獨存在,但是,不能讓防盜門繼承自門的同時又繼承自鎖,防盜門不是鎖,不符合繼承中isa的關係,在java中支持單繼承。
那麼我們如何來解決這一問題,這時就要用到介面。
二.什麼是介面 在軟體中介面是一種規範和標準,他們可以約束類的行為,是一些方法特徵的集合,但是沒有方法的實現,介面其實上也可以看做是一個特殊的抽象類,但是採用和抽象類完全不同的方法來表示,兩者的設計理念也是不同的,抽象類有利於代碼復用,介面利於代碼的擴展和維護。
三.抽象類和介面的區別: 01抽象類可以提供成員方法的實現細節,而介面中只能存在publicabstract方法; 02.抽象類中的成員變數可以是各種類型的,而介面中的成員變數只能是publicstaticfinal類型的; 03.介面中不能含有靜態代碼塊以及靜態方法,而抽象類可以有靜態代碼塊和靜態方法; 04.一個類只能繼承一個抽象類,而一個類卻可以實現多個介面。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/301665.html