Java框架 Map簡單實現

2021-09-07 19:50:39 字數 4210 閱讀 8765

linkedmapimplements map

以鍊錶的的形式實現鍵值對的儲存,

儲存 鍵 - 值 對的資料結構, node

static

class

node

implements

map.entry

, serializable

map介面方法介紹

**參考了 jdk1.8 linkedlist 的實現;

對於 linkedlist的實現感興趣的請看這篇部落格linkedlist原始碼**

/**

* 以單鏈表的形式實現(鍵-值)對

* put 的時間規模為 o(1), get remove set 的時間規模的最壞時為 o(n)

* 這個鍊錶不支援 往後遍歷, 不同於hash 表的是它不需要擴容也沒有容量的限制,記憶體利用率非常高而且省記憶體.在記憶體緊缺的情況下非常有好處.

* * @author chenyq

* @date 2019-01-01

* @email [email protected]

* * @param * @param */

public

class

linkedmap

implements

map, cloneable, serializable

public

linkedmap

(map

m)@override

public

intsize()

@override

public

boolean

isempty()

@override

public

boolean

containskey

(object key)

@override

public

boolean

containsvalue

(object value)

return

false;}

@override

public v get

(object key)

@override

public v put

(k key, v value)

return

add(key, value);}

v add

(k k, v v)

modcount++

;linklast

(new

node

<

>

(k, v));

return null;}

node

node

(object key)

node = node.next;

}return null;

}void

linklast

(node

n)else

size++;}

@override

public v remove

(object key)

node

unlink

(object key)

else

return e;

} prev = e;

e = next;

}return e;

}@override

public

void

putall

(map<

?extendsk,

?extends

v> m)

modcount++

;for

(entry<

?extendsk,

?extends

v> entry : m.

entryset()

)}@override

public

void

clear()

size =0;

modcount++;}

@override

public set

keyset()

/** * 這是乙個只支援包含返回所有 key 的迭代器的set檢視

*/class

keyset

extends

abstractset

@override

public

intsize()

}@override

public collection

values()

/** * 返回所有 value 的collection 的檢視

*/class

valuecollection

extends

abstractcollection

@override

public

intsize()

}@override

public set

>

entryset()

/** * 返回包含所有 鍵值對的set 集合檢視

* */

class

entryset

extends

abstractset

>

@override

public

intsize()

@override

public string tostring()

}@override

public object clone()

throws clonenotsupportedexception

/** *

* 這是乙個迭代器,

* @param */

abstract

class

linkediterator

implements

iterator

@override

public

boolean

hasnext()

entry

nextentry()

current = next;

next = next.next;

index++

;return current;

}void

checkmodcount()

}@override

public

void

remove()

}class

entrysetiterator

extends

linkediterator

>

}class

keysetiterator

extends

linkediterator

}class

valuesetiterator

extends

linkediterator

}@override

public string tostring()

stringbuilder sb =

newstringbuilder()

; node

n = first;

dowhile

((n = n.next)

!= null)

;int len = sb.

length()

;return sb.

delete

(len -

2, len).(

']')

.tostring()

;}/** *

* 這個是用於儲存鍵值對的節點, 即鍊錶.是單鏈表, 只能往前迭代.

* @param * @param */

static

class

node

implements

map.entry

, serializable

@override

public k getkey()

@override

public v getvalue()

@override

public v setvalue

(v value)

@override

public string tostring()

}}

java集合框架(map集合)

map集合 該集合儲存鍵值對,一對一對往裡存,而且要保證鍵值得唯一性。一 基本方法 1.新增 put k key,v value 將指定的值與此對映中的指定鍵關聯 可選操作 putall map m 從指定對映中將所有對映關係複製到此對映中 可選操作 2.刪除 從此對映中移除所有對映關係 可選操作 ...

Java集合類框架 Map

如果是實現了map介面的集合類,具備的特點 儲存的資料都是以鍵值對的形式存在的,鍵不可重複,值可以重複。map介面的方法 新增 put k key,v value putall map extends k,extends v m 刪除 remove object key clear 獲取 get o...

Java中map集合框架

map 一次新增一對元素,collection一次新增乙個元素 map也稱為雙列集合,collection稱為單列集合 其實map集合中儲存的就是鍵值對。必須保證鍵的唯一性 1.新增 value put key,value 返回前乙個和key關聯的值,如果沒有返回null 2.修改 void cle...