一、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