本章目标
掌握Map接口与Collection接口的不同
掌握Map与Map.Entry接口的关系
掌握Map接口的常用子类:HashMap、Hashtable、TreeMap、WeakHashMap
掌握HashMap与Hastable的区别
Map接口
之前所讲解的Collection、Set、List接口都属于单值的操作,即:每次只能操作一个对象,而Map与它们不同的是,每次操作的是一对对象,即二元偶对象,Map中的每个元素都使用key à value的形式存储在集合之中,此接口定义如下:
——public interface Map<K,V>
Map接口中的方法
Map.Entry接口
Map.Entry是Map中内部定义的一个接口,专门用来保存keyàvalue的内容。
Map.Entry接口定义:
——public static interface Map.Entry<K,V>
Map.Entry接口的常用方法
Map与Map.Entry
Map接口的常用子类
Map接口的常用子类:
——HashMap:无序存放的,是新的操作类,key不允许重复。
——Hashtable:无序存放的,是旧的操作类,key不允许重复。
——TreeMap:可以排序的Map集合,按集合中的key排序,key不允许重复。
——WeakHashMap:弱引用的Map集合,当集合中的某些内容不再使用时,可以清除掉无用的数据,可以使用gc进行回收。
——IdentityHashMap:key可以重复的Map集合。
新的子类:HashMap
HashMap本身是Map的子类,直接使用此类为Map接口实例化即可。
HashMap类的定义如下:
——public class HashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>, Cloneable, Serializable
实例操作一:向集合中增加和取出内容
import java.util.HashMap; import java.util.Map; public class HashMapDemo01 { public static void main(String[] args) { Map<String,String> map = null;//声明 Map 对象 map = new HashMap<String, String>();//key 和 value 是 String 类 map.put("baidu", "www.baidu.com");//增加内容 map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容 map.put("name", "chaoyi");//增加内容 String val = map.get("聊程");//根据 key 求出 value System.out.println("取出的内容是:"+val);//输出 Map,调用 toString() } /* 结果: * 取出的内容是:阅谁问君诵,水落清香浮 * */ }
实例操作二:判断指定的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 对象 map = new HashMap<String, String>();//key 和 value 是 String 类 map.put("baidu", "www.baidu.com");//增加内容 map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容 map.put("name", "chaoyi");//增加内容 if(map.containsKey("聊程")){//查找指定的 key 是否存在 System.out.println("搜索的 key 存在!"); }else{ System.out.println("搜索的 key 不存在!"); } if(map.containsValue("www.baidu.com")){//查找指定的 value 是否存在 System.out.println("搜索的 value 存在!"); }else{ System.out.println("搜索的 value 不存在!"); } } /* 结果: * 搜索的 key 存在! * 搜索的 value 存在! * */ }
实例操作三:输出全部的key
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashMapDemo03 { public static void main(String[] args) { Map<String,String> map = null;//声明 Map 对象 map = new HashMap<String, String>();//key 和 value 是 String 类 map.put("baidu", "www.baidu.com");//增加内容 map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容 map.put("name", "chaoyi");//增加内容 Set<String> keys = map.keySet();//得到全部的 key Iterator<String> iter = keys.iterator();//实例化 Iterator System.out.print("全部的 key:");//输出信息 while(iter.hasNext()){//迭代输出全部的 key String str = iter.next();//取出集合的 key System.out.print(str+"、");//输出内容 } } /* 结果: * 全部的 key:baidu、聊程、name、 * */ }
实例操作四:输出全部的value
import java.util.Collection; import java.util.HashMap; import java.util.Iterator; import java.util.Map; public class HashMapDemo04 { public static void main(String[] args) { Map<String,String> map = null;//声明 Map 对象 map = new HashMap<String, String>();//key 和 value 是 String 类 map.put("baidu", "www.baidu.com");//增加内容 map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容 map.put("name", "chaoyi");//增加内容 Collection<String> values = map.values();//得到全部的 values Iterator<String> iter = values.iterator();//实例化 Iterator System.out.print("全部的 value:");//输出信息 while(iter.hasNext()){//迭代输出 String str = iter.next();//取出 value System.out.print(str+"、");//输出内容 } } /* 结果: * 全部的 value:www.baidu.com、阅谁问君诵,水落清香浮、chaoyi、 * */ }
旧的子类:Hashtable
import java.util.Collection; import java.util.Hashtable; import java.util.Iterator; import java.util.Map; import java.util.Set; public class HashtableDemo01 { public static void main(String[] args) { Map<String,String> map = null;//声明 Map 对象 map = new Hashtable<String, String>();//key 和 value 是 String 类 map.put("baidu", "www.baidu.com");//增加内容 map.put("聊程", "阅谁问君诵,水落清香浮");//增加内容 map.put("name", "chaoyi");//增加内容 Set<String> keys = map.keySet();//得到全部的 key Iterator<String> iter1 = keys.iterator();//实例化 Iterator System.out.print("全部的 key :");//输出信息 while(iter1.hasNext()){//迭代输出全部的 key String str = iter1.next();//取出内容 System.out.print(str+"、");//输出内容 } Collection<String> values = map.values();//得到全部的 value Iterator<String> iter2 = values.iterator();//实例化 Iterator System.out.print("\n全部的 value:");//输出信息 while(iter2.hasNext()){//迭代输出全部的 value String str = iter2.next();//取出内容 System.out.print(str+"、"); //输出内容 } } /* 结果: * 全部的 key :name、baidu、聊程、 * 全部的 value:chaoyi、www.baidu.com、阅谁问君诵,水落清香浮、 * */ }
HashMap与Hashtable的区别
排序的子类:TreeMap
import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.TreeMap; public class TreeMapDemo01 { public static void main(String[] args) { Map<String,String> map = null;//声明 Map 对象 map = new TreeMap<String, String>();//key 和 value 是 String 类 map.put("A、baidu", "www.baidu.com");//增加内容 map.put("C、name", "chaoyi");//增加内容 map.put("B、聊程", "阅谁问君诵,水落清香浮");//增加内容 Set<String> keys = map.keySet();//得到全部的 key Iterator<String> iter = keys.iterator();//实例化 Iterator while(iter.hasNext()){//迭代输出 String str = iter.next();//取出 key System.out.println(str+"-->"+map.get(str));//取出 key 对应的内容 } } /* 结果: * A、baidu-->www.baidu.com * B、聊程-->阅谁问君诵,水落清香浮 * C、name-->chaoyi * */ }
弱引用类:WeakHashMap
之前所讲解的Map 子类中的数据都是使用强引用保存的,即:里面的内容不管是否使用都始终在集合中保留,如果希望集合可以自动清理暂时不用的数据就可以使用WeakHashMap类。
WeakHashMap的定义如下:
——public class WeakHashMap<K,V>extends AbstractMap<K,V>implements Map<K,V>
观察弱引用的Map集合
import java.util.Map; import java.util.WeakHashMap; public class WeakHashMapDemo01 { public static void main(String[] args) { Map<String,String> map = null; map = new WeakHashMap<String, String>();//实例化 Map 对象 map.put(new String("baidu"),new String("www.baidu.com")); map.put(new String("聊程"), new String("阅谁问君诵,水落清香浮")); map.put(new String("name"), new String("chaoyi")); System.gc();//进行垃圾收集 map.put(new String("newCom"), new String("夜无为还是夜")); System.out.println("内容:"+map);//一般只会剩下一个内容 } /* 结果: * 取出的内容是:内容:{newCom=夜无为还是夜} * */ }
提示:对象的引用强度说明
从JDK1.2版本开始,Java把对象的引用分为四种级别,从而使程式能更加灵活的控制对象的生命周期。这四种级别由高到低依次为:强引用、软引用、弱引用和虚引用,下面来简单了解以下这四种引用的区别:
——强引用:当内存不足时,JVM宁可出现OutOfMemeryError错误而使程序停止,也不会回收此对象来释放空间;
——软引用:当内存不足时,会回收这些对象的内存,用来实现内存敏感的高速缓存;
——弱引用:无论内存是否紧张,被垃圾回收器发现立即回收;
——虚引用:和没有任何引用一样。
相关推荐
List接口,Map接口,迭代器terator,泛型集合
12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类.zip12.javaMap 接口及其实现类....
13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.javaMap接口的两个实现类:.zip13.java...
Map接口概念 Java集合框架中的Map接口表示一种键值对(key-value)的数据结构,其中每个元素都包含一个唯一的键和对应的值。在Map中,每个键必须是唯一的,而值可以重复。Map接口提供了一些方法来实现基本的键值对...
全面的对GoogleMap和BingMap 的地图API进行分析,如果是做地图开发或做自己的GIS平台,应该是有帮助的
此代码用以更加深刻理解Map接口方法的功能,里面的代码包括Map所有接口方法的使用,以及某些方法的使用时的注意事项
CDMA MAP接口规范1 文件详细阐述了IS41规范中所有消息的解释和触发因素.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~2.List(列表<接口>)以线性方式存储,有序,允许重复主要实现类有LinkList(采用链表数据结构)和ArrayList(代表可大可小的数组) Eg: ...
JSP应用开发-Java集合类-Map接口.pptx
java.util.map接口,Java集合框架,hashmap、LinkedHashMap
java 集合和泛型 1. Map接口 2. HashMap底层实现 3. Hash数据结构和算法 4. 红黑树数据结构和算法
计算机后端-Java-Java核心基础-第25章 集合02 07. Map接口及其多个实现类的对比.avi
1.什么是Map Map是Java集合中的三大接口之一,其存储形式为键(Key)值(Value)对,是程序...2.Map接口的实现类 interface Map --| class HashMap 哈希表 --| class TreeMap 底层是树形结构,存储要求K有对应的排序方
主要介绍了Java Map接口及其实现类原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
NULL 博文链接:https://chaoyi.iteye.com/blog/2086134
首先会将传入的可以、做hash运算计算出hashCode,然后根据数组长度取模计算出在数组中的index下表 由于在计算机中位运算比取模运算效率高,所以HashMsap规定数组的长度为2n。这样用2n-1做位运算与取模效果一致,并且...
农业信息系统开发
// 常用的map接口的实现类有HashMap,LinkedHashMap和TreeMap // HashMap不保证集合中元素的顺序, // LinkedHashMap按插入顺序排序 // TreeMap按自己的意愿进行排序,默认按key值升序排序。 另包含一篇网文:在java...
主要介绍了Java8 中 Map 接口的新方法,本文通过代码实例给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下