【Java类集】_Map接口笔记
掌握Map接口与Collection接口不同
掌握Map与Map.Entry接口的关系
掌握Map接口的常用子类:HashMap、HashTable、TreeMap、WeekHashMap
掌握HashMap与HashTable的区别
3、具体内容
Collection的操作中之前已经发现,每次保存对象都一个对象,但是在Map中保存是的一对对象,对象的形式是以:key->value的形式保存的。
就好像电话本:张三->123456
Map接口中的方法
No. 方法或类 类型 描述
1 public void clear() 普通 清空Map集合
2 public boolean containsKey(Object key) 普通 判断指定的key是否存在
3 public boolean containsValue(Object value) 普通 判断指定的value是否存在
4 public Set<Map.Entry<K,V>> entrySet() 普通 将Map对象变为Set集合
5 public boolean equals(Object o) 普通 对象比较
6 public V get(Object K) 普通 根据key获得value
7 public int hashCode() 普通 返回哈希码
8 public boolean isEmpty() 普通 判断集合是否为空
9 public Set<K> keySet() 普通 取得所有的key
10 public V put(K key,V value) 普通 向集合中加入元素
11 public void putAll(Map<? extends K,extends V> t)普通 将一个Map集合中的内容加入到别一个Map
12 public V remove(Object key) 普通 根据key删除value
13 public int size() 普通 取得集合长度
14 public Collection<V> values() 普通 取得全部的value
Map接口的常用子类:
HashMap:无序存放的,是新的操作类,key不允许重复。
Hashtable:无序存放的,是旧的操作类,key不允许重复。
TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复。
WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时,可以清楚掉无用的数据,可以使用gc进行回收。
IdentityHashMap:key可以重复的Map集合。
Map与Map.entry的关系:
以HashMap为例,说明Map的基本方法的操作。
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo01{
public static void main(String[] args){
Map<String,String> map = null;
map = new HashMap<String,String>();
map.put("mldn","www.mldn.cn");
map.put("zhinangtuan","www.zhinangtuan.cn");
map.put("mldnjava","www.mldnjava.cn");
String val = map.get("mldn");
System.out.println("取出的内容是:"+val);
}
}
输出:取出的内容是:www.mldn.cn
在map中也可以使用containsXxx()方法判断指定的key或者value是否存在。
import java.util.HashMap;
import java.util.Map;
public class HashMapDemo02{
public static void main(String[] args){
Map<String,String> map = null;
map = new HashMap<String,String>();
map.put("mldn","www.mldn.cn");
map.put("zhinangtuan","www.zhinangtuan.cn");
map.put("mldnjava","www.mldnjava.cn");
if(map.containsKey("mldn")){
System.out.println("搜索的key存在!");
}else{
System.out.println("搜索的key不存在!");
}
if(map.containsValue("www.mldn.cn")){ //判断value是否存在
System.out.println("搜索的value存在!");
}else{
System.out.println("搜索的value不存在!");
}
}
}
输出:
搜索的key存在!
搜索的value存在!
如果现在想输出全部的key,则使用如下方法:
Set<K> keySet()
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
public class HashMapDemo03{
public static void main(String[] args){
Map<String,String> map = null;
map = new HashMap<String,String>();
map.put("mldn","www.mldn.cn");
map.put("zhinangtuan","www.zhinangtuan.cn");
map.put("mldnjava","www.mldnjava.cn");
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()){
String str = iter.next();
System.out.print(str+"、");
}
}
}
输出:
zhinangtuan、mldn、mldnjava、
既然可以输出全部的key,那么就肯定可以输出全部的value
Collection<V> values()
import java.util.HashMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Collection;
public class HashMapDemo04{
public static void main(String[] args){
Map<String,String> map = null;
map = new HashMap<String,String>();
map.put("mldn","www.mldn.cn");
map.put("zhinangtuan","www.zhinangtuan.cn");
map.put("mldnjava","www.mldnjava.cn");
Collection<String> keys = map.values();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()){
String str = iter.next();
System.out.print(str+"、");
}
}
}
输出:www.zhinangtuan.cn、www.mldn.cn、www.mldnjava.cn、
在Map中也存在一个Hashtable子类,实际上这个子类的推出时间与Vector是一样的,都属于旧类。
import java.util.Hashtable;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
import java.util.Collection;
public class HashtableDemo01{
public static void main(String[] args){
Map<String,String> map = null;
map = new Hashtable<String,String>();
map.put("mldn","www.mldn.cn");
map.put("zhinangtuan","www.zhinangtuan.cn");
map.put("mldnjava","www.mldnjava.cn");
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()){
String str = iter.next();
System.out.print(str+"、");
}
System.out.println("");
Collection<String> values = map.values();
Iterator<String> iterv = values.iterator();
while(iterv.hasNext()){
String str = iterv.next();
System.out.print(str+"、");
}
}
}
输出:
mldn、mldnjava、zhinangtuan、
www.mldn.cn、www.mldnjava.cn、www.zhinangtuan.cn、
HashMap与Hashtable的区别
No. 比较点 HashMap Hashtable
1 推出时间 JDK1.2之后推出,属于新的操作类 JDK1.0推出,属于旧的操作类
2 性能 采用异步处理方式,性能更高 采用同步处理方式,性能较低
3 线程安全 属于非线程安全的操作类 属于线程安全的操作类
在Map中还存在一个TreeMap的子类,此类也属于排序类,按key排序。
import java.util.TreeMap;
import java.util.Map;
import java.util.Iterator;
import java.util.Set;
import java.util.Collection;
public class TreeMapDemo01{
public static void main(String[] args){
Map<String,String> map = null;
map = new TreeMap<String,String>();
map.put("A、mldn","www.mldn.cn");
map.put("B、zhinangtuan","www.zhinangtuan.cn");
map.put("C、mldnjava","www.mldnjava.cn");
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()){
String str = iter.next();
System.out.print(str+"、");
}
System.out.println("");
Collection<String> values = map.values();
Iterator<String> iterv = values.iterator();
while(iterv.hasNext()){
String str = iterv.next();
System.out.print(str+"、");
}
}
}
输出:
A、mldn、B、zhinangtuan、C、mldnjava、
www.mldn.cn、www.zhinangtuan.cn、www.mldnjava.cn、
使用TreeMap可以方便的完成排序的操作,如果自定义的类要做为key的话,则肯定要实现Comparable接口,指定比较的规则。
弱引用:WeakHashMap
之前所讲解的Map子类中的数据都是使用强引用保存的,即:里面的内容不管是否使用都始终在集合中保留,如果希望集合可以自动清理暂时不用的数据就可以使用WeakHashMap类。
WeakHashMap的定义如下:
public class WeakHashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>
如果假设一个Map中的某些内容长时间不使用的话,按照之前的做法是不会删除掉的,如果希望其可以自动删除掉,可以使用弱引用
import java.util.WeakHashMap;
import java.util.Map;
import java.util.Set;
import java.util.Iterator;
import java.util.Collection;
public class WeakHashMapDemo01{
public static void main(String[] args){
Map<String,String> map = null;
map = new WeakHashMap<String,String>();
map.put(new String("mldn"),new String("www.mldn.cn"));
map.put(new String("zhinangtuan"),new String("www.zhinangtuan.cn"));
map.put(new String("mldnjava"),new String("www.mldnjava.cn"));
System.gc();
map.put(new String("lxh"),new String("lixinghua"));
System.out.println(map);
}
}
输出:
{lxh=lixinghua}
提示:对象的引用强度说明
从JDK1.2版本开始,Java把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期.这四种级别由高到低依次为:强引用,软引用,弱引用和虚引用,下面来简单了解以下四种引用的区别:
强引用:当内存不足时,JVM宁可出现OutOfMemeryError错误而使程序停止,也不会回收此对象来释放空间。
软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存。
弱引用:无论内存是否紧张,被垃圾回收器发现立即回收
虚引用:和没有任何引用一样
4、总结
1.介绍了Map的特点及基本操作
2.Map与Map.Entry的关系
3.Map的子类:HashMap、Hashtable、TreeMap、WeakHashMap
4.主要功能就是查找,根据key找到value