Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaÖÐHashMapºÍTreeMapµÄÇø±ðÉîÈëÀí½â
 
»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-07-02
 

Ê×ÏȽéÉÜÒ»ÏÂʲôÊÇMap¡£ÔÚÊý×éÖÐÎÒÃÇÊÇͨ¹ýÊý×éϱêÀ´¶ÔÆäÄÚÈÝË÷ÒýµÄ£¬¶øÔÚMapÖÐÎÒÃÇͨ¹ý¶ÔÏóÀ´¶Ô¶ÔÏó½øÐÐË÷Òý£¬ÓÃÀ´Ë÷ÒýµÄ¶ÔÏó½Ð×ökey£¬Æä¶ÔÓ¦µÄ¶ÔÏó½Ð×övalue¡£Õâ¾ÍÊÇÎÒÃÇÆ½Ê±ËµµÄ¼üÖµ¶Ô¡£

HashMapͨ¹ýhashcode¶ÔÆäÄÚÈݽøÐпìËÙ²éÕÒ£¬¶ø TreeMapÖÐËùÓеÄÔªËØ¶¼±£³Ö×ÅijÖ̶ֹ¨µÄ˳Ðò£¬Èç¹ûÄãÐèÒªµÃµ½Ò»¸öÓÐÐòµÄ½á¹ûÄã¾ÍÓ¦¸ÃʹÓÃTreeMap£¨HashMapÖÐÔªËØµÄÅÅÁÐ˳ÐòÊDz»¹Ì¶¨µÄ£©¡£

HashMap ·ÇḬ̈߳²È« TreeMap ·ÇḬ̈߳²È«

Ḭ̈߳²È«

ÔÚJavaÀḬ̈߳²È«Ò»°ãÌåÏÖÔÚÁ½¸ö·½Ã棺

1¡¢¶à¸öthread¶Ôͬһ¸öjavaʵÀýµÄ·ÃÎÊ£¨readºÍmodify£©²»»áÏ໥¸ÉÈÅ£¬ËüÖ÷ÒªÌåÏÖÔڹؼü×Ösynchronized¡£ÈçArrayListºÍVector£¬HashMapºÍHashtable

£¨ºóÕßÿ¸ö·½·¨Ç°¶¼ÓÐsynchronized¹Ø¼ü×Ö£©¡£Èç¹ûÄãÔÚinteratorÒ»¸öList¶ÔÏóʱ£¬ÆäËüÏß³ÌremoveÒ»¸öelement£¬ÎÊÌâ¾Í³öÏÖÁË¡£

2¡¢Ã¿¸öÏ̶߳¼ÓÐ×Ô¼ºµÄ×ֶΣ¬¶ø²»»áÔÚ¶à¸öÏß³ÌÖ®¼ä¹²Ïí¡£ËüÖ÷ÒªÌåÏÖÔÚjava.lang.ThreadLocalÀ࣬¶øÃ»ÓÐJava¹Ø¼ü×ÖÖ§³Ö£¬ÈçÏñstatic¡¢transientÄÇÑù¡£

1.AbstractMap³éÏóÀàºÍSortedMap½Ó¿Ú

AbstractMap³éÏóÀࣺ(HashMap¼Ì³ÐAbstractMap)¸²¸ÇÁËequals()ºÍhashCode()·½·¨ÒÔÈ·±£Á½¸öÏàµÈÓ³Éä·µ»ØÏàͬµÄ¹þÏ£Âë¡£Èç¹ûÁ½¸öÓ³Éä´óСÏàµÈ¡¢°üº¬Í¬ÑùµÄ¼üÇÒÿ¸ö¼üÔÚÕâÁ½¸öÓ³ÉäÖжÔÓ¦µÄÖµ¶¼Ïàͬ£¬ÔòÕâÁ½¸öÓ³ÉäÏàµÈ¡£Ó³ÉäµÄ¹þÏ£ÂëÊÇÓ³ÉäÔªËØ¹þÏ£ÂëµÄ×ܺͣ¬ÆäÖÐÿ¸öÔªËØÊÇMap.Entry½Ó¿ÚµÄÒ»¸öʵÏÖ¡£Òò´Ë£¬²»ÂÛÓ³ÉäÄÚ²¿Ë³ÐòÈçºÎ£¬Á½¸öÏàµÈÓ³Éä»á±¨¸æÏàͬµÄ¹þÏ£Âë¡£

SortedMap½Ó¿Ú£º£¨TreeMap¼Ì³Ð×ÔSortedMap£©ËüÓÃÀ´±£³Ö¼üµÄÓÐÐò˳Ðò¡£SortedMap½Ó¿ÚΪӳÏñµÄÊÓͼ(×Ó¼¯)£¬°üÀ¨Á½¸ö¶ËµãÌṩÁË·ÃÎÊ·½·¨¡£³ýÁËÅÅÐòÊÇ×÷ÓÃÓÚÓ³ÉäµÄ¼üÒÔÍ⣬´¦ÀíSortedMapºÍ´¦ÀíSortedSetÒ»Ñù¡£Ìí¼Óµ½SortedMapʵÏÖÀàµÄÔªËØ±ØÐëʵÏÖComparable½Ó¿Ú£¬·ñÔòÄú±ØÐë¸øËüµÄ¹¹Ô캯ÊýÌṩһ¸öComparator½Ó¿ÚµÄʵÏÖ¡£TreeMapÀàÊÇËüµÄΨһһ·ÝʵÏÖ¡£

2.Á½ÖÖ³£¹æMapʵÏÖ

HashMap£º»ùÓÚ¹þÏ£±íʵÏÖ¡£Ê¹ÓÃHashMapÒªÇóÌí¼ÓµÄ¼üÀàÃ÷È·¶¨ÒåÁËhashCode()ºÍequals()[¿ÉÒÔÖØÐ´hashCode()ºÍequals()]£¬ÎªÁËÓÅ»¯HashMap¿Õ¼äµÄʹÓã¬Äú¿ÉÒÔµ÷ÓųõʼÈÝÁ¿ºÍ¸ºÔØÒò×Ó¡£

(1)HashMap(): ¹¹½¨Ò»¸ö¿ÕµÄ¹þÏ£Ó³Ïñ

(2)HashMap(Map m): ¹¹½¨Ò»¸ö¹þÏ£Ó³Ïñ£¬²¢ÇÒÌí¼ÓÓ³ÏñmµÄËùÓÐÓ³Éä

(3)HashMap(int initialCapacity): ¹¹½¨Ò»¸öÓµÓÐÌØ¶¨ÈÝÁ¿µÄ¿ÕµÄ¹þÏ£Ó³Ïñ

(4)HashMap(int initialCapacity, float loadFactor): ¹¹½¨Ò»¸öÓµÓÐÌØ¶¨ÈÝÁ¿ºÍ¼ÓÔØÒò×ӵĿյĹþÏ£Ó³Ïñ

TreeMap£º»ùÓÚºìºÚÊ÷ʵÏÖ¡£TreeMapûÓе÷ÓÅÑ¡ÏÒòΪ¸ÃÊ÷×Ü´¦ÓÚÆ½ºâ״̬¡£

(1)TreeMap():¹¹½¨Ò»¸ö¿ÕµÄÓ³ÏñÊ÷

(2)TreeMap(Map m): ¹¹½¨Ò»¸öÓ³ÏñÊ÷£¬²¢ÇÒÌí¼ÓÓ³ÏñmÖÐËùÓÐÔªËØ

(3)TreeMap(Comparator c): ¹¹½¨Ò»¸öÓ³ÏñÊ÷£¬²¢ÇÒʹÓÃÌØ¶¨µÄ±È½ÏÆ÷¶Ô¹Ø¼ü×Ö½øÐÐÅÅÐò

(4)TreeMap(SortedMap s): ¹¹½¨Ò»¸öÓ³ÏñÊ÷£¬Ìí¼ÓÓ³ÏñÊ÷sÖÐËùÓÐÓ³É䣬²¢ÇÒʹÓÃÓëÓÐÐòÓ³ÏñsÏàͬµÄ±È½ÏÆ÷ÅÅÐò

3.Á½ÖÖ³£¹æMapÐÔÄÜ

HashMap£ºÊÊÓÃÓÚÔÚMapÖвåÈ롢ɾ³ýºÍ¶¨Î»ÔªËØ¡£

Treemap£ºÊÊÓÃÓÚ°´×ÔȻ˳Ðò»ò×Ô¶¨Òå˳Ðò±éÀú¼ü(key)¡£

4.×ܽá

HashMapͨ³£±ÈTreeMap¿ìÒ»µã(Ê÷ºÍ¹þÏ£±íµÄÊý¾Ý½á¹¹Ê¹È»)£¬½¨Òé¶àʹÓÃHashMap£¬ÔÚÐèÒªÅÅÐòµÄMapʱºò²ÅÓÃ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<String, String> map = new HashMap<String, String>();
map.put("a", "aaa");
map.put("b", "bbb");
map.put("c", "ccc");
map.put("d", "ddd");
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
Object key = iterator.next();
System.out.println("map.get(key) is :" + map.get(key));
}
// ¶¨ÒåHashTable,ÓÃÀ´²âÊÔ
Hashtable<String, String> tab = new Hashtable<String, String>();
tab.put("a", "aaa");
tab.put("b", "bbb");
tab.put("c", "ccc");
tab.put("d", "ddd");
Iterator<String> 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<String, String> tmp = new TreeMap<String, String>();
tmp.put("a", "aaa");
tmp.put("b", "bbb");
tmp.put("c", "ccc");
tmp.put("d", "cdc");
Iterator<String> iterator_2 = tmp.keySet().iterator();
while (iterator_2.hasNext()) {
Object key = iterator_2.next();
System.out.println("tmp.get(key) is :" + tmp.get(key));
}
}
}

ÔËÐнá¹ûÈçÏ£º

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

HashMapµÄ½á¹ûÊÇûÓÐÅÅÐòµÄ£¬¶øTreeMapÊä³öµÄ½á¹ûÊÇÅźÃÐòµÄ¡£

ÏÂÃæ¾ÍÒª½øÈë±¾ÎĵÄÖ÷ÌâÁË¡£ÏȾٸöÀý×Ó˵Ã÷Ò»ÏÂÔõÑùʹÓÃHashMap:

import java.util.*;
public class Exp1 {
public static void main(String[] args){
HashMap h1=new HashMap();
Random r1=new Random();
for (int i=0;i<1000;i++){
Integer t=new Integer(r1.nextInt(20));
if (h1.containsKey(t))
((Ctime)h1.get(t)).count++;
else
h1.put(t, new Ctime());
}
System.out.println(h1);
}
}
class Ctime{
int count=1;
public String toString(){
return Integer.toString(count);
}
}

ÔÚHashMapÖÐͨ¹ýget()À´»ñÈ¡value£¬Í¨¹ýput()À´²åÈëvalue£¬ContainsKey()ÔòÓÃÀ´¼ìÑé¶ÔÏóÊÇ·ñÒѾ­´æÔÚ¡£¿ÉÒÔ¿´³ö£¬ºÍArrayListµÄ²Ù×÷Ïà±È£¬HashMap³ýÁËͨ¹ýkeyË÷ÒýÆäÄÚÈÝÖ®Í⣬±ðµÄ·½Ãæ²îÒì²¢²»´ó¡£

Ç°Ãæ½éÉÜÁË£¬HashMapÊÇ»ùÓÚHashCodeµÄ£¬ÔÚËùÓжÔÏóµÄ³¬ÀàObjectÖÐÓÐÒ»¸öHashCode()·½·¨£¬µ«ÊÇËüºÍequals·½·¨Ò»Ñù£¬²¢²»ÄÜÊÊÓÃÓÚËùÓеÄÇé¿ö£¬ÕâÑùÎÒÃǾÍÐèÒªÖØÐ´×Ô¼ºµÄHashCode()·½·¨¡£ÏÂÃæ¾Í¾ÙÕâÑùÒ»¸öÀý×Ó£º

import java.util.*;
public class Exp2 {
public static void main(String[] args){
HashMap h2=new HashMap();
for (int i=0;i<10;i++)
h2.put(new Element(i), new Figureout());
System.out.println("h2:");
System.out.println("Get the result for Element:");
Element test=new Element(5);
if (h2.containsKey(test))
System.out.println((Figureout)h2.get(test));
else
System.out.println("Not found");
}
}
class Element{
int number;
public Element(int n){
number=n;
}
}
class Figureout{
Random r=new Random();
boolean possible=r.nextDouble()>0.5;
public String toString(){
if (possible)
return "OK!";
else
return "Impossible!";
}
}

ÔÚÕâ¸öÀý×ÓÖУ¬ElementÓÃÀ´Ë÷Òý¶ÔÏóFigureout,Ò²¼´ElementΪkey£¬FigureoutΪvalue¡£ÔÚFigureoutÖÐËæ»úÉú³ÉÒ»¸ö¸¡µãÊý£¬Èç¹ûËü±È0.5´ó£¬´òÓ¡"OK!"£¬·ñÔò´òÓ¡"Impossible!"¡£Ö®ºó²é¿´Element(3)¶ÔÓ¦µÄFigureout½á¹ûÈçºÎ¡£

½á¹ûÈ´·¢ÏÖ£¬ÎÞÂÛÄãÔËÐжàÉٴΣ¬µÃµ½µÄ½á¹û¶¼ÊÇ"Not found"¡£Ò²¾ÍÊÇ˵Ë÷ÒýElement(3)²¢²»ÔÚHashMapÖС£ÕâÔõô¿ÉÄÜÄØ£¿

Ô­ÒòµÃÂýÂýÀ´Ëµ£ºElementµÄHashCode·½·¨¼Ì³Ð×ÔObject£¬¶øObjectÖеÄHashCode·½·¨·µ»ØµÄHashCode¶ÔÓ¦ÓÚµ±Ç°µÄµØÖ·£¬Ò²¾ÍÊÇ˵¶ÔÓÚ²»Í¬µÄ¶ÔÏ󣬼´Ê¹ËüÃǵÄÄÚÈÝÍêÈ«Ïàͬ£¬ÓÃHashCode£¨£©·µ»ØµÄÖµÒ²»á²»Í¬¡£ÕâÑùʵ¼ÊÉÏÎ¥±³ÁËÎÒÃǵÄÒâͼ¡£ÒòΪÎÒÃÇÔÚʹÓà HashMapʱ£¬Ï£ÍûÀûÓÃÏàͬÄÚÈݵĶÔÏóË÷ÒýµÃµ½ÏàͬµÄÄ¿±ê¶ÔÏó£¬Õâ¾ÍÐèÒªHashCode()ÔÚ´ËʱÄܹ»·µ»ØÏàͬµÄÖµ¡£ÔÚÉÏÃæµÄÀý×ÓÖУ¬ÎÒÃÇÆÚÍû new Element(i) (i=5)Óë Elementtest=newElement(5)ÊÇÏàͬµÄ£¬¶øÊµ¼ÊÉÏÕâÊÇÁ½¸ö²»Í¬µÄ¶ÔÏ󣬾¡¹ÜËüÃǵÄÄÚÈÝÏàͬ£¬µ«ËüÃÇÔÚÄÚ´æÖеĵØÖ·²»Í¬¡£Òò´ËºÜ×ÔÈ»µÄ£¬ÉÏÃæµÄ³ÌÐòµÃ²»µ½ÎÒÃÇÉèÏëµÄ½á¹û¡£ÏÂÃæ¶ÔElementÀà¸ü¸ÄÈçÏ£º

class Element{
int number;
public Element(int n){
number=n;
}
public int hashCode(){
return number;
}
public boolean equals(Object o){
return (o instanceof Element) && (number==((Element)o).number);
}
}

ÔÚÕâÀïElement¸²¸ÇÁËObjectÖеÄhashCode()ºÍequals()·½·¨¡£¸²¸ÇhashCode()ʹÆäÒÔnumberµÄÖµ×÷Ϊ hashcode·µ»Ø£¬ÕâÑù¶ÔÓÚÏàͬÄÚÈݵĶÔÏóÀ´ËµËüÃǵÄhashcodeÒ²¾ÍÏàͬÁË¡£¶ø¸²¸Çequals()ÊÇΪÁËÔÚHashMapÅжÏÁ½¸ökeyÊÇ·ñÏàµÈʱʹ½á¹ûÓÐÒâÒ壨ÓйØÖØÐ´equals()µÄÄÚÈÝ¿ÉÒԲο¼ÎÒµÄÁíһƪÎÄÕ¡¶ÖØÐ±àдObjectÀàÖеķ½·¨¡·£©¡£Ð޸ĺóµÄ³ÌÐòÔËÐнá¹ûÈçÏ£º

h2:

Get the result for Element:

Impossible!

Çë¼Çס£ºÈç¹ûÄãÏëÓÐЧµÄʹÓÃHashMap£¬Äã¾Í±ØÐëÖØÐ´ÔÚÆäµÄHashCode()¡£

»¹ÓÐÁ½ÌõÖØÐ´HashCode()µÄÔ­Ôò£º

[list=1]

²»±Ø¶Ôÿ¸ö²»Í¬µÄ¶ÔÏó¶¼²úÉúÒ»¸öΨһµÄhashcode£¬Ö»ÒªÄãµÄHashCode·½·¨Ê¹get()Äܹ»µÃµ½put()·Å½øÈ¥µÄÄÚÈݾͿÉÒÔÁË¡£¼´"²»ÎªÒ»Ô­Ôò"¡£

Éú³ÉhashcodeµÄËã·¨¾¡Á¿Ê¹hashcodeµÄÖµ·ÖɢһЩ£¬²»ÒªºÜ¶àhashcode¶¼¼¯ÖÐÔÚÒ»¸ö·¶Î§ÄÚ£¬ÕâÑùÓÐÀûÓÚÌá¸ßHashMapµÄÐÔÄÜ¡£¼´"·ÖÉ¢Ô­Ôò"¡£ÖÁÓÚµÚ¶þÌõÔ­ÔòµÄ¾ßÌåÔ­Òò£¬ÓÐÐËȤÕß¿ÉÒԲο¼Bruce EckelµÄ¡¶Thinking in Java¡·£¬ÔÚÄÇÀïÓжÔHashMapÄÚ²¿ÊµÏÖÔ­ÀíµÄ½éÉÜ£¬ÕâÀï¾Í²»×¸ÊöÁË¡£

ÕÆÎÕÁËÕâÁ½ÌõÔ­Ôò£¬Äã¾ÍÄܹ»ÓúÃHashMap±àд×Ô¼ºµÄ³ÌÐòÁË¡£²»ÖªµÀ´ó¼Ò×¢ÒâûÓУ¬java.lang.ObjectÖÐÌṩµÄÈý¸ö·½·¨£ºclone()£¬equals()ºÍhashCode()ËäÈ»ºÜµäÐÍ£¬µ«ÔںܶàÇé¿ö϶¼²»Äܹ»ÊÊÓã¬ËüÃÇÖ»ÊǼòµ¥µÄÓɶÔÏóµÄµØÖ·µÃ³ö½á¹û¡£Õâ¾ÍÐèÒªÎÒÃÇÔÚ×Ô¼ºµÄ³ÌÐòÖÐÖØÐ´ËüÃÇ£¬ÆäʵjavaÀà¿âÖÐÒ²ÖØÐ´ÁËǧǧÍòÍò¸öÕâÑùµÄ·½·¨¡£ÀûÓÃÃæÏò¶ÔÏóµÄ¶à̬ÐÔ¡ª¡ª¸²¸Ç£¬JavaµÄÉè¼ÆÕߺÜÓÅÑŵĹ¹½¨ÁËJavaµÄ½á¹¹£¬Ò²¸ü¼ÓÌåÏÖÁËJavaÊÇÒ»ÃÅ´¿OOPÓïÑÔµÄÌØÐÔ¡£

   
´Îä¯ÀÀ       
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö


Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ