List,Set,Map集合格納null解析およびHashMap,Hashtable異同点解析

1998 ワード

1.List、Set、Mapセットはnull解析を格納する:
@Test
	public void CollectionTest() {
		//  List
		List list = new ArrayList();
		list.add(null);
		list.add(null);
		System.out.println(list);

		//  Set
		Set set = new HashSet();
		set.add(null);
		set.add(null);
		System.out.println(set);

		//  HashMap Hashtable
		Map hashMap = new HashMap();
		hashMap.put(null, null);
		hashMap.put(null, null);
		hashMap.put(1, null);
		hashMap.put(1, 12);
		System.out.println(hashMap);
		/// Maps the specified key to the specified
		// value in this hashtable. Neither the key nor the
		// value can be null. 

Map hashtable = new Hashtable(); hashtable.put(1, "string1"); hashtable.put(2, "string2"); System.out.println(hashtable); } // : //[null, null] //[null] //{null=null, 1=12} //{2=string2, 1=string1}


このことから、Listセットはnullを格納し、いくつか追加し、いくつか格納することができる.
Setセットはnullを格納することもできるが、1つしか格納できず、複数追加しても1つしか格納できない.
HashMapはnullキー値ペアを格納することができ、キーと値はnullであってもよいが、追加したキー値ペアのキーが同じであれば、後に追加したキー値ペアは前のキー値ペア、すなわち後に格納したキー値ペアを上書きする.
Hashtableはnullに触ってはいけません.値もキーもnullを見るとポインタが空になります.
2.HashMap、Hashtable異同点
同じ点:両方ともMapインタフェースを実現
異なる点:1 HashMapはnullキー値ペアを格納することができ、Hashtableはnullキー値ペアを格納することができない.
②HashMapは非synchronizedであり、Hashtableはsynchronizedである.Sychronizedは、Hashtableを変更できるスレッドが1つしかないことを意味します.つまり、どのスレッドもHashtableを更新する場合はまず同期ロックを取得し、他のスレッドは同期ロックが解放されてから再び同期ロック更新Hashtableを取得する必要があります.すなわち、Hashtableはスレッドが安全であり、複数のスレッドが1つのHashtableを共有することができる.正確な同期がなければ、複数のスレッドはHashMapを共有できません.Hashtableはスレッドが安全でsynchronizedであるため、単一スレッド環境ではHashMapよりも遅い.同期が不要で単一スレッドのみが必要な場合は、HashMapを使用するとHashtableよりもパフォーマンスが向上します.Java 5は、HashTableの代わりに、HashTableの拡張性よりも優れたConcurrentHashMapを提供します.したがって、完全に安全なスレッドが必要な場合は、HashtableまたはConcurrentHashMapを使用する必要があります.