真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Java中HashMap和TreeMap有什么區(qū)別

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)Java中HashMap和TreeMap有什么區(qū)別,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)建站服務(wù)項(xiàng)目包括臥龍網(wǎng)站建設(shè)、臥龍網(wǎng)站制作、臥龍網(wǎng)頁(yè)制作以及臥龍網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,臥龍網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到臥龍省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

首先介紹一下什么是Map。在數(shù)組中我們是通過(guò)數(shù)組下標(biāo)來(lái)對(duì)其內(nèi)容索引的,而在Map中我們通過(guò)對(duì)象來(lái)對(duì)對(duì)象進(jìn)行索引,用來(lái)索引的對(duì)象叫做key,其對(duì)應(yīng)的對(duì)象叫做value。這就是我們平時(shí)說(shuō)的鍵值對(duì)。

HashMap通過(guò)hashcode對(duì)其內(nèi)容進(jìn)行快速查找,而 TreeMap中所有的元素都保持著某種固定的順序,如果你需要得到一個(gè)有序的結(jié)果你就應(yīng)該使用TreeMap(HashMap中元素的排列順序是不固定的)。

HashMap 非線程安全 TreeMap 非線程安全

線程安全

在Java里,線程安全一般體現(xiàn)在兩個(gè)方面:

1、多個(gè)thread對(duì)同一個(gè)java實(shí)例的訪問(wèn)(read和modify)不會(huì)相互干擾,它主要體現(xiàn)在關(guān)鍵字synchronized。如ArrayList和Vector,HashMap和Hashtable

(后者每個(gè)方法前都有synchronized關(guān)鍵字)。如果你在interator一個(gè)List對(duì)象時(shí),其它線程remove一個(gè)element,問(wèn)題就出現(xiàn)了。

2、每個(gè)線程都有自己的字段,而不會(huì)在多個(gè)線程之間共享。它主要體現(xiàn)在java.lang.ThreadLocal類,而沒(méi)有Java關(guān)鍵字支持,如像static、transient那樣。

1.AbstractMap抽象類和SortedMap接口

AbstractMap抽象類:(HashMap繼承AbstractMap)覆蓋了equals()和hashCode()方法以確保兩個(gè)相等映射返回相同的哈希碼。如果兩個(gè)映射大小相等、包含同樣的鍵且每個(gè)鍵在這兩個(gè)映射中對(duì)應(yīng)的值都相同,則這兩個(gè)映射相等。映射的哈希碼是映射元素哈希碼的總和,其中每個(gè)元素是Map.Entry接口的一個(gè)實(shí)現(xiàn)。因此,不論映射內(nèi)部順序如何,兩個(gè)相等映射會(huì)報(bào)告相同的哈希碼。

SortedMap接口:(TreeMap繼承自SortedMap)它用來(lái)保持鍵的有序順序。SortedMap接口為映像的視圖(子集),包括兩個(gè)端點(diǎn)提供了訪問(wèn)方法。除了排序是作用于映射的鍵以外,處理SortedMap和處理SortedSet一樣。添加到SortedMap實(shí)現(xiàn)類的元素必須實(shí)現(xiàn)Comparable接口,否則您必須給它的構(gòu)造函數(shù)提供一個(gè)Comparator接口的實(shí)現(xiàn)。TreeMap類是它的唯一一份實(shí)現(xiàn)。

2.兩種常規(guī)Map實(shí)現(xiàn)

HashMap:基于哈希表實(shí)現(xiàn)。使用HashMap要求添加的鍵類明確定義了hashCode()和equals()[可以重寫(xiě)hashCode()和equals()],為了優(yōu)化HashMap空間的使用,您可以調(diào)優(yōu)初始容量和負(fù)載因子。

(1)HashMap(): 構(gòu)建一個(gè)空的哈希映像

(2)HashMap(Map m): 構(gòu)建一個(gè)哈希映像,并且添加映像m的所有映射

(3)HashMap(int initialCapacity): 構(gòu)建一個(gè)擁有特定容量的空的哈希映像

(4)HashMap(int initialCapacity, float loadFactor): 構(gòu)建一個(gè)擁有特定容量和加載因子的空的哈希映像

TreeMap:基于紅黑樹(shù)實(shí)現(xiàn)。TreeMap沒(méi)有調(diào)優(yōu)選項(xiàng),因?yàn)樵摌?shù)總處于平衡狀態(tài)。

(1)TreeMap():構(gòu)建一個(gè)空的映像樹(shù)

(2)TreeMap(Map m): 構(gòu)建一個(gè)映像樹(shù),并且添加映像m中所有元素

(3)TreeMap(Comparator c): 構(gòu)建一個(gè)映像樹(shù),并且使用特定的比較器對(duì)關(guān)鍵字進(jìn)行排序

(4)TreeMap(SortedMap s): 構(gòu)建一個(gè)映像樹(shù),添加映像樹(shù)s中所有映射,并且使用與有序映像s相同的比較器排序

3.兩種常規(guī)Map性能

HashMap:適用于在Map中插入、刪除和定位元素。

Treemap:適用于按自然順序或自定義順序遍歷鍵(key)。

4.總結(jié)

HashMap通常比TreeMap快一點(diǎn)(樹(shù)和哈希表的數(shù)據(jù)結(jié)構(gòu)使然),建議多使用HashMap,在需要排序的Map時(shí)候才用TreeMap。

import java.util.HashMap;

import java.util.Hashtable;

import java.util.Iterator;

import java.util.Map;

import java.util.TreeMap;

public 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,用來(lái)測(cè)試

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", "cdc");

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));

}

}

}

運(yùn)行結(jié)果如下:

map.get(key) is :ddd

map.get(key) is :bbb

map.get(key) is :ccc

map.get(key) is :aaa

tab.get(key) is :bbb

tab.get(key) is :aaa

tab.get(key) is :ddd

tab.get(key) is :ccc

tmp.get(key) is :aaa

tmp.get(key) is :bbb

tmp.get(key) is :ccc

tmp.get(key) is :cdc武漢仁濟(jì)中西醫(yī)結(jié)合醫(yī)院

HashMap的結(jié)果是沒(méi)有排序的,而TreeMap輸出的結(jié)果是排好序的。

下面就要進(jìn)入本文的主題了。先舉個(gè)例子說(shuō)明一下怎樣使用HashMap:

import java.util.*;

public class Exp1 {

public static void main(String[] args){

HashMap h2=new HashMap();

Random r1=new Random();

for (int i=0;i<1000;i++){

Integer t=new Integer(r1.nextInt(20));

if (h2.containsKey(t))

((Ctime)h2.get(t))。count++;

else

h2.put(t, new Ctime());

}

System.out.println(h2);

}

}

class Ctime{

int count=1;

public String toString(){

return Integer.toString(count);

}

}

上述就是小編為大家分享的Java中HashMap和TreeMap有什么區(qū)別了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


網(wǎng)站題目:Java中HashMap和TreeMap有什么區(qū)別
本文鏈接:http://weahome.cn/article/ppgcji.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部