HashMap пен Hashtable арасындағы айырмашылық қандай? Бұл Java / J2EE мамандары үшін жиі сұрақ қойылған сұрақтардың бірі. HashMap және Hashtable екеуі де java.util.Map интерфейсін іске асырады, бірақ олар жұмыс істеуінде және оларды пайдалануда айырмашылықтар бар. Мұнда біз осы сыныптар арасындағы айырмашылықтарды талқылаймыз.
HashMap vs Hashtable
1) HashMap синхрондалмаған. Бұл мультимедиялық ортада пайдаланылған кезде, егер бірнеше ағым HashMap-ге бір уақытта қол жеткізе және өңдей алады дегенді білдіреді.
Hashtable синхрондалған. Ол Hashtable-ке бір сәтте бір мезгілде қол жеткізе алмайды. Hashtable-да жұмыс істейтін жіп, оның жұмыс аяқталғанға дейін басқа ағындарды күту үшін құлыпқа ие болады.
2) HashMap бір нөлдік кілтті және бос мәндердің кез келген санын береді.
Hashtable нөлдік пернелерге және бос мәндерге жол бермейді.
3) HashMap іске асыру LinkedHashMap кірістіру тәртібін сақтайды және TreeMap кілттердің өсу тәртібіне негізделген салыстыруды сұрыптайды.
Hashtable кез-келген тапсырысқа кепілдік бермейді. Ол кез-келген тәртіпте салыстыруларды сақтамайды.
4) Hashtable бастапқыда Map интерфейсін іске асыру үшін кейінірек жинақталғаннан кейін жинау негізінің мүшесі болып табылатын коллекциялық жүйенің бөлігі болмады.
HashMap картасы интерфейсін іске асырады және басынан бастап коллекциялық құрылымның бөлігі болып табылады.
5) Осы сыныптардың арасындағы басқа айырмашылық, HashMap-дің итераторы сәтсіз болып табылады және егер кез келген басқа Thread, iterator's own remove () әдісінен басқа кез келген элементті қосу немесе жою арқылы құрылымды түрде өзгертсе, ConcurrentModificationException шығарады. Қарапайым сөзбен айтқанда, тез емес: тезірек iterator.next () шақырылған кезде, иератор құрылды сәттен бастап және келесі () сәтте кез келген өзгерістер жасалса, ConcurrentModificationException бірден лақтырылады.
Hashtable үшін санауыш жылдам емес.
Мысалы үшін
HashMap:
HashMap hm = жаңа HashMap (); .... .... Кілттерді орнату = hm.keySet (); (Объектінің кілті: кілттері) { // мұнда ConcurrentModificationException тастайды hm.put (нысан мен мән жұбы); }
Hashtable:
Hashtable ht = жаңа Hashtable (); .... ..... Перекресток пернелер = ht.keys (); (Enumeration en = ht.elements (); en.hasMoreElements (); en.nextElement ()) { // Мұнда ешқандай ерекшеліктер жоқ ht.put (мұнда перне және мән жұбы); }
HashMap және Hashtable пайдалану керек пе?
1) Жоғарыда айтылғандай, HashMap Hashtable арасындағы негізгі айырмашылық синхрондау болып табылады. Егер ағындық қауіпсіз жұмыс қажет болса, Hashtable пайдаланылуы мүмкін, себебі оның барлық әдістері синхрондалады, бірақ бұл - бұрынғы сынып және оны болдырмау керек, себебі бұл туралы ештеңе жоқ, оны HashMap жасай алмайды. Multi-thread ортасы үшін ConcurrentHashMap (Hashtable-ге дерлік ұқсас) пайдалануға кеңес берсеңіз немесе тіпті HashMap синхрондалған түрде нақты жасауға болады ( Read here ..).
2) синхрондалған жұмыс қажетсіз болғанша аулақ болу керек. Осылайша, HashMap ешқандай даусыз ортаға күмәнсіз пайдаланылуы керек.
тамаша !
Сәлем, жақсы мақала. Өте пайдалы.
Бірақ менің ойымша, синхрондалған тұжырымдаманы айналдырдыңыз.
Синхрондалмаған деректер құрылымы көп емес ағынды ортада қолдануға арналған және синхрондалған деректер құрылымы көп ағынды орта үшін