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