Java類集之Map接口

一、Map接口:

Collection、Set、List接口都屬於單值的操作,即每次只能操作一個對象,而Map與他們不同的是,每次操作的是一對對象,,即二元偶對象,Map中的每個元素都使用key->value的形式存儲在集合之中,此接口定義如下:

public interface Map<K, V>

二、Map.Entry接口:

1.Map.Entry是Map中內部定義的一個接口,專門用來保存key->value的內容

2.Map.Entry接口定義:

public static interface Map.Entry<K, V>

Map與Map.Entry


三、Map接口的常用子類

Map接口的常用子類:

1.HashMap:無序存放的,是新的操作類,key不允許重複。

2.HashTable:無序存放的,是舊的操作類,key不允許重複。

3.TreeMap:可以排序的Map集合,按集合的key排序,key不允許重複。

4.WeakHashMap:弱引用的Map集合,當集合中的某些內容不再使用時,可以清除掉無用的數據,可以使用gc進行回收。

5.IdentityHashMap:key可以重複的Map集合。

樣例1:

import java.util.Map;
import java.util.HashMap;

public class MapDemo{
	public static void main(String[] args){
		Map<String, String> map = null;		//聲明Map對象,其中key和value的類型爲String
		map = new HashMap<String, String>();
		map.put("wei", "Joywy");		//增加內容
		map.put("jing", "Summer");
		String val = map.get("wei");	//根據key取出值
		System.out.println(val);
		if(map.containsKey("jing")){	//判斷key是否存在
			System.out.println("搜索的key存在!");
		}else{
			System.out.println("搜索的key不存在!");
		}
		if(map.containsValue("Joywy")){	//判斷value是否存在
			System.out.println("搜索的value存在!");
		}else{
			System.out.println("搜索的value不存在!");
		}
	}
}

樣例2(Hashtable操作類):

import java.util.Map;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Collection;
import java.util.Set;

public class MapDemo{
	public static void main(String[] args){
		Map<String, String> map = null;		//聲明Map對象,其中key和value的類型爲String
		map = new Hashtable<String, String>();
		map.put("wei", "Joywy");		//增加內容
		map.put("jing", "Summer");
		Set<String> keys = map.keySet();			//得到全部的key
		Collection<String> values = map.values();	//得到全部的value
		Iterator<String> iter1 = keys.iterator();
		Iterator<String> iter = values.iterator();
		System.out.print("全部的key:");
		while(iter1.hasNext()){
			String str = iter1.next();
			System.out.print(str + "、");
		}
		System.out.print("\n全部的value:");
		while(iter.hasNext()){
			String str = iter.next();
			System.out.print(str + "、");
		}
	}
}
樣例3:

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;

public class MapDemo{
	public static void main(String[] args){
		Map<String, String> map = null;		//聲明Map對象,其中key和value的類型爲String
		map = new HashMap<String, String>();
		map.put("wei", "Joywy");		//增加內容
		map.put("jing", "Summer");
		Set<String> keys = map.keySet();	//得到全部的key
		Iterator<String> iter = keys.iterator();
		while(iter.hasNext()){
			String str = iter.next();
			System.out.print(str + "、");
		}
		System.out.println();
	}
}
樣例4:

import java.util.Map;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Collection;

public class MapDemo{
	public static void main(String[] args){
		Map<String, String> map = null;		//聲明Map對象,其中key和value的類型爲String
		map = new HashMap<String, String>();
		map.put("wei", "Joywy");		//增加內容
		map.put("jing", "Summer");
		Collection<String> values = map.values();	//得到全部的value
		Iterator<String> iter = values.iterator();
		while(iter.hasNext()){
			String str = iter.next();
			System.out.print(str + "、");
		}
	}
}

比較點

HashMap

Hashtable

推出時間

JDK1.2之後推出,屬於新的操作類

JDK1.0時推出,屬於舊的操作類

性能

採用異步處理方式,性能更高

採用同步處理方式,性能較低

線程安全

屬於非線程安全的操作類

屬於線程安全的操作類

樣例5:

import java.util.Map;
import java.util.TreeMap;
import java.util.Iterator;
import java.util.Collection;
import java.util.Set;

public class MapDemo{
	public static void main(String[] args){
		Map<String, String> map = null;		//聲明Map對象,其中key和value的類型爲String
		map = new TreeMap<String, String>();
		map.put("C、wei", "Joywy");		//增加內容
		map.put("B、jing", "Summer");
		map.put("A、", "Lily");
		Set<String> keys = map.keySet();			//得到全部的key
		Collection<String> values = map.values();	//得到全部的value
		Iterator<String> iter1 = keys.iterator();
		while(iter1.hasNext()){
			String str = iter1.next();
			System.out.println(str + "-->" + map.get(str));
		}
	}
}

注:如果自定義的類要想作爲key的話,則肯定要實現Comparable接口,指定比較的規則。

弱引用類:WeakHashMap

Map子類中的數據都是使用強引用保存的,即:裏面的內容不管是否使用都始終在集合中保留,如果希望集合可以自動清理暫時不用的數據就可以使用WeakHashMap類,WeakHashMap的定義如下:

public class WeakHashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>

import java.util.Map;
import java.util.WeakHashMap;

public class MapDemo{
	public static void main(String[] args){
		Map<String, String> map = null;		//聲明Map對象,其中key和value的類型爲String
		map = new WeakHashMap<String, String>();
		map.put(new String("wei"), new String("Joywy"));		//增加內容
		map.put(new String("jing"), new String("Summer"));
		System.gc();	//強制性進行垃圾的收集操作
		//map.put(new String("AI"), new String("Iverson"));
		System.out.println(map);
	}
}
提示:對象的引用強度說明

從JDK1.2版本開始,Java把對象的引用分爲四種級別,從而是程序能夠更加靈活的控制對象的生命週期。這四種級別由高到低依次爲:強引用、軟引用、弱引用和虛引用,一下是四種引用的區別:

1.強引用:當內存不足時,JVM寧可出現OutOfMemeryError錯誤而使程序停止,也不會回收此對象來釋放空間;

2.軟引用:當內存不足時,會回收這些對象的內存,用來實現內存敏感的高速緩存;

3.弱引用:無論內存是否緊張,被垃圾回收器發現立即回收;

4.虛引用:和沒有任何引用一樣。
注:Map的主要功能就是查找,根據key查找value

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章