map介面:雙列資料,儲存key-value對的資料。
1.hashmap作為map的主要實現類,執行緒不安全的,效率高,可以儲存null的key和value。
hashmap底層:陣列和鍊錶(jdk7)陣列,鍊錶和紅黑樹(jdk8)
hashmap的內部類:node
static class nodeimplements map.entry
hashmap原始碼中的重要的常量:
default_initial_capacity:hashmap的預設容量,16
maximum_capacity:hashmap的最大支援量,0.75
default_load_factor:hashmap的預設載入因子
treeify_threshold:bucket中煉表長度大於該預設值,轉化為紅黑樹,8
untreeify_threhold:bucket中紅黑樹儲存的node小於該預設值,轉化為鍊錶
min_treeify_capacity:桶中的node被樹化時最小的hash表容量,64
table:儲存元素的陣列,總是2的n次冪
entryset:儲存具體元素的集
size:hashmap中儲存的鍵值對的數量
modcount:hashmap擴容和結構改變的次數
threshold:擴容的臨界值,等於容量加填充因子,12
loadfactor:填充因子
2.linkedhashmap:是hashmap的子類,保證在遍歷map元素時,可以按照新增的順序實現遍歷,對於頻繁的遍歷操作,它的執 行效率高於hashmap.
原因:在原有的hashmap底層結構的基礎上,新增了一對指標,指向前乙個和後乙個元素。
linkedhashmap中的內部類:entry
static class entryextends hashmap.node
}
3.treemap:保證按照新增的key-value對進行排序,實現排序遍歷,此時考慮key的自然排序或者定製排序。底層使用紅黑樹
向treemap中新增key-value對,要求key必須是由同乙個類建立的物件,因為是按照key進行排序的。
4.hashtable作為古老的實現類,執行緒安全,效率低,不可以儲存null的key和value。底層都使用雜湊表結構,查詢速度快。
5.properties:是hashtable的子類,常用來處理配置檔案。key和value都是string型別的。訪問資料時,建議使用setproperty(string key,string value)和getproperty(string key)
properties pros = new properties();
pros.load(new fileinputstream("jdbc.properties"));
string user = pros.getproperty("user");
system.out.println(user);
map中的key:是無序的,不可重複的,使用set儲存所有的key --->key所在的類要重寫equals()和hashcode()(以hashmap為例)
map中的value:是無序的, 可重複的,使用collection儲存所有的value。 --->value
所在的類要重寫equals()
乙個鍵值對:key-value構成了乙個entry物件。
map中的entry:是無序的,不可重複的,使用set儲存所有的entry。
object put(object key,object value):將指定key-value新增到(或修改)當前map物件中
void putall(map m):將m中的所有key-value對存放到當前map中
object remove(object key):移除指定key的key-value對,並返回value
void clear():清空當前map中的所有資料
map map = new linkedhashmap();
map.put(123,"aa");
map.put("12","bb");
map.put(3,"cc");
map.put(6,4);
system.out.println(map);
map map1 = new linkedhashmap();
map1.put(8,"cc");
map1.put(9,0);
map.putall(map1);
system.out.println(map);
object value = map.remove("cc");
system.out.println(map);
system.out.println(value);
map1.clear();
system.out.println(map1.size());
object get(object key):獲取當前集合的元素
boolean containskey(object key):是否包含指定的key
boolean containsvalue(object value):是否包含指定的value
int size():返回map中key-value對的個數
boolean isempty():判斷當前map是否為空
boolean equals(object obj):判斷當前map和引數物件obj是否相等
map map2 = new hashmap();
map2.put(123,"aa");
map2.put("12","bb");
map2.put(3,"cc");
map2.put(6,4);
object obj = map2.get(6);
system.out.println(obj);
boolean i***ist = map2.containskey("12");
system.out.println(i***ist);
system.out.println( map2.containsvalue(4));
boolean bool = map2.equals(map);
system.out.println(bool);
set keyset():返回所有key構成的set集合
collection values():返回所有value構成的collection集合
set entryset():返回所有key-value對構成的set集合
map map3 = new hashmap();
map3.put(123,"aa");
map3.put("12","bb");
map3.put(3,"cc");
map3.put(6,4);
//遍歷key值:keyset()
set set = map.keyset();
iterator iterator = set.iterator();
while (iterator.hasnext())
//遍歷所有的value
collection val = map3.values();
for (object ob : val)
//遍歷鍵值對
set se = map3.entryset();
iterator iterator1 = set.iterator();
while (iterator1.hasnext())
java中的Map以及常用子類
map 主要用於儲存健值對,根據鍵得到值,因此不允許鍵重複 重複了覆蓋了 但允許值重複。hashmap 根據鍵的 hashcode 值儲存資料 根據鍵可以直接獲取它的值,具有很快的訪問速度,遍歷時,取得資料的順序是完全隨機的。hashmap 最多隻允許一條記錄的鍵為 null 允許多條記錄的值為 n...
Java中Map介面的使用
map介面也是乙個非常重要的集合介面,用於儲存鍵 值對。map中的元素都是成對出現的,鍵值對就像陣列的索引與陣列的內容的關係一樣,將乙個鍵對映到乙個值的物件。乙個對映不能包含重複的鍵 每個鍵最多只能對映到乙個值。key value value可以儲存任意型別的物件,我們可以根據key鍵快速查詢val...
5 10 java中的介面以及實現類
定義介面 介面特點 1.沒有構造方法 不能定義構造器 不能new 2.介面只能繼承介面,不能繼承類,支援多繼承 3.介面中的方法預設使用public abstract修飾 4.介面中的字段預設使用public static final 5.介面中的類是公共靜態的 public static 類和類之...