深入理解java對映map的底層操

2021-06-21 15:03:29 字數 1694 閱讀 3724

對映:層次結構:

(1)map (介面)其

子介面和其實現類如下

(一)enummap(抽象類)  implementsmap

(二)sortedmap(介面)     exntends  map           treemap extends sortedmap  treemap加入如和刪除元素是根據key來進行的,其原理和treeset完全一樣

(三)hashmap                     implements  map

(四)hashtable                         implements  map             properties   extends hashtable         hashmap和hashtable的關係就像arraylist和vector的關係,hashtable是古老的類,所以盡量少用,原理和hashtable差不多,properties   是對屬性檔案的操作

enummap中的key值和enumset的元素的原理非常相似

(一.1)enummap的元素加入儲存的機制是:當建立enummap物件 enummap  em=new enummap(season.class);時  就把season型別的列舉值賦給enummap的鍵(key)屬性private transient k keyuniverse了:並為private transient object vals屬性建立空的陣列用來儲存enummap中的value;底層**如下:

public enummap(classkeytype)

put操作的**如下:先進行型別檢查,如果加入的元素型別不是season或者其父類,則丟擲異常,

所以enummap中只可以存放相同列舉型別的物件,否則會丟擲型別轉換異常,然後把key對應的值加入到vals中,同時size加一

public v put(k key, v value)

remove的操作如下:

public v remove(object key)

(二.1)treeset                     implements    sortedset

(三.1)linkedhashset       exntends  hashset 

hashmap類中加入元素(可以加入不同型別的元素)的機制和hashset中的相同:是根據其(鍵)key元素的equals(object o)方法和hashcode()方法來判斷是否能夠加入新的元素,hashmap中的元素是無序的,刪除key值也是要通過equals(object o)方法和hashcode()方法來判斷是否存在該key,如果存在則刪除,否則刪除不成功,hashmap中判斷兩個value是否相等,只要通過該物件的equals(object o)進行判斷就可以了.

linkedhashmap的原理和hashmap的相同,只是linkedhashmap是有序的,先加入的排在前面,底層通過鍊錶來維護這種順序。

由於hashmap和linkedhashmap

類加入和刪除元素的機制是根據add(object obj)加入物件obj的hashcode()的hash值和equals(object o)進行比較是否可加入新元素或者存在該元素,由於所有的類的hash值都是整數,是可比較的,並且所有類預設的equals(object o)方法都可以與任何型別的物件進行比較,如果是與不同型別的物件進行比較時,返回的值是false,所以hashmap和linkedhashmap類中可加入不同型別的元素.

O R關係對映的深入理解

廣義上,orm指的是物件導向的物件模型和關係型資料庫的資料結構之間的相互轉換。狹義上,orm可以被認為是,基於關係型資料庫的資料儲存,實現乙個虛擬的物件導向的資料訪問介面。理想情況下,基於這樣乙個物件導向的介面,持久化乙個oo物件應該不需要要了解任何關係型資料庫儲存資料的實現細節。廣義上,因為我們需...

JAVA 深入理解 IO

定義 如果乙個類是用來完成程式和裝置之間的資料傳輸,則這個類有乙個特殊的稱謂叫 流 流和類的關係 流一定是類,但是類不一定是流。分類 輸入流 輸出流 位元組流 字元流 原始流 包裹流 常用流 的介紹 四大基本抽象流 inputstream outputsream reader writer 位元組流...

java 的繼承,深入理解

一切 於乙個問題 如果超類中的方法,沒有訪問控制,什麼限定符都沒用,那在子類中覆蓋這個方法,並定義成private可以嗎,怎麼驗證呢?思路辦法 編碼測試之 public class atest public class btest extends atest 編譯報錯,子類嘗試覆蓋父類的方法,但是卻...