国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

HashMap,HashTable,TreeMap區(qū)別和用法

2019-11-15 00:15:10
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
HashMap,HashTable,TreeMap區(qū)別和用法

開始學(xué)HashTable,HashMap和TreeMap的時(shí)候比較暈,覺得作用差不多,但是到實(shí)際運(yùn)用的時(shí)候又發(fā)現(xiàn)有許多差別的。需要大家注意,在實(shí)際開發(fā)中以需求而定。

java為數(shù)據(jù)結(jié)構(gòu)中的映射定義了一個(gè)接口java.util.Map,而HashMap Hashtable和TreeMap就是它的實(shí)現(xiàn)類。Map是將鍵映射到值的對(duì)象,一個(gè)映射不能包含重復(fù)的鍵;每個(gè)鍵最多只能映射一個(gè)一個(gè)值。

Hashmap是一個(gè)最常用的Map,它根據(jù)鍵的HashCode 值存儲(chǔ)數(shù)據(jù),根據(jù)鍵可以直接獲取它的值,具有很快的訪問速度。HashMap最多只允許一條記錄的鍵為Null;允許多條記錄的值為Null;HashMap不支持線程的同步,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫HashMap;可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要同步,可以用Collections的synchronizedMap方法使HashMap具有同步的能力.

Hashtable與 HashMap類似,但是主要有6點(diǎn)不同。

1.HashTable的方法是同步的,HashMap未經(jīng)同步,所以在多線程場(chǎng)合要手動(dòng)同步HashMap這個(gè)區(qū)別就像Vector和ArrayList一樣。

2.HashTable不允許null值,key和value都不可以,HashMap允許null值,key和value都可以。HashMap允許key值只能由一個(gè)null值,因?yàn)閔ashmap如果key值相同,新的key,value將替代舊的。

3.HashTable有一個(gè)contains(Objectvalue)功能和containsValue(Objectvalue)功能一樣。

4.HashTable使用Enumeration,HashMap使用Iterator。

5.HashTable中hash數(shù)組默認(rèn)大小是11,增加的方式是old*2+1。HashMap中hash數(shù)組的默認(rèn)大小是16,而且一定是2的指數(shù)。

6.哈希值的使用不同,HashTable直接使用對(duì)象的hashCode。

TreeMap能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按升序排序,也可以指定排序的比較器,當(dāng)用Iterator 遍歷TreeMap時(shí),得到的記錄是排過序的。

下面是HashTable,HashMap和TreeMap總結(jié)的一個(gè)經(jīng)典例子。

package com.taobao.luxiaoting;

import java.util.Map;

import java.util.HashMap;

import java.util.Set;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Hashtable;

import java.util.TreeMap;

class HashMaps

{

public static void main(String[] args)

{

Map map=new HashMap();

map.put(“a”, “aaa”);

map.put(“b”, “bbb”);

map.put(“c”, “ccc”);

map.put(“d”, “ddd”);

Iterator iterator = map.keySet().iterator();

while (iterator.hasNext()) {

Object key = iterator.next();

System.out.PRintln(“map.get(key) is :”+map.get(key));

}

Hashtable tab=new Hashtable();

tab.put(“a”, “aaa”);

tab.put(“b”, “bbb”);

tab.put(“c”, “ccc”);

tab.put(“d”, “ddd”);

Iterator iterator_1 = tab.keySet().iterator();

while (iterator_1.hasNext()) {

Object key = iterator_1.next();

System.out.println(“tab.get(key) is :”+tab.get(key));

}

TreeMap tmp=new TreeMap();

tmp.put(“a”, “aaa”);

tmp.put(“b”, “bbb”);

tmp.put(“c”, “ccc”);

tmp.put(“d”, “ddd”);

Iterator iterator_2 = tmp.keySet().iterator();

while (iterator_2.hasNext()) {

Object key = iterator_2.next();

System.out.println(“tmp.get(key) is :”+tmp.get(key));

}

}

}

結(jié)果:

=========map=========map.get(key) is :dddmap.get(key) is :bbbmap.get(key) is :cccmap.get(key) is :aaa=========Hashtable=========tab.get(key) is :bbbtab.get(key) is :aaatab.get(key) is :dddtab.get(key) is :ccc=========TreeMap=========tmp.get(key) is :aaatmp.get(key) is :bbbtmp.get(key) is :ccctmp.get(key) is :ddd


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 石景山区| 固始县| 瓮安县| 鄂温| 靖远县| 丽江市| 建昌县| 阿拉善盟| 昌邑市| 青浦区| 潼南县| 抚松县| 德江县| 巴林左旗| 文成县| 乐至县| 鹰潭市| 霍城县| 辽宁省| 逊克县| 萍乡市| 海宁市| 珲春市| 大名县| 前郭尔| 南城县| 定陶县| 五常市| 贵州省| 雷州市| 辽源市| 布拖县| 沭阳县| 盐津县| 原平市| 诸暨市| 江华| 咸阳市| 柳江县| 蒲江县| 芜湖市|