本章目标
掌握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接口详解 #### 一、Java集合框架概览 Java集合框架是Java标准库的一个核心组成部分,用于处理各种数据结构如列表、集合和映射等。该框架提供了一组统一的接口和实现,使开发人员能够高效地管理和...
### GoogleMap与BingMap接口分析 #### 一、GoogleMap API详解 ##### 1.1 前言 在地图开发领域,Google Maps API 是一个广泛使用的工具集,为开发者提供了丰富的功能来构建交互式地图应用。这些API不仅支持基本的...
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接口是一个键值对的集合,其中每个元素都由一个键对象和一个值对象组成。键是唯一的,而值可以重复。Map接口的主要实现类有HashMap和TreeMap。 - **HashMap**:基于哈希表,无序且不保证元素的顺序,允许null...
### Java软件开发实战:Map接口详解 #### 一、Map接口概述 Map接口是Java集合框架中的一个重要组成部分,用于存储键值对(key-value pairs)。Map接口与其他集合接口(如List和Set)不同之处在于,它允许每个键...
Java集合框架中的Map接口是Java编程中非常重要的一个部分,它提供了一种存储键值对数据的方式。在Map中,每个键(key)都是唯一的,用于标识对应的值(value),而值可以重复出现。这种数据结构广泛应用于各种场景,...
重点探讨了 Java集合框架中的 Map接口及其主要实现类(HashMap、TreeMap、LinkedHashMap),并通过示例代码展示它们的使用方法。文章还深入讨论了泛型在 Map中的应用及其优缺点,最后介绍了一些高级用法,如自定义 ...
Map接口是这个框架中的一个重要组成部分,它提供了一种存储键值对数据的方式。Map接口不同于Collection接口,因为它存储的不是单一元素,而是键值对,即每个元素都是一个键(key)和一个值(value)的组合。 Map...
在处理复杂数据存储时,集合框架是必不可少的工具,而Map接口则是集合框架中的一个重要组成部分。Map接口定义了键值对(key-value pairs)的数据结构,使得我们可以根据键来高效地查找对应的值。 在农业信息系统...
集合框架(最终版)-list接口、set接口、Queue接口、Map接口
此代码用以更加深刻理解Map接口方法的功能,里面的代码包括Map所有接口方法的使用,以及某些方法的使用时的注意事项
Map接口及其实现类在Java编程中扮演着重要角色。通过本文的介绍,相信读者能更好地理解Map的工作原理、常用方法及其在实际应用中的使用。HashMap提供了高效但无序的存储,LinkedHashMap维护插入顺序,TreeMap提供了...
java.util.map接口,Java集合框架,hashmap、LinkedHashMap
Java Map接口及其实现类原理解析 Java Map接口是Java集合框架中的一种重要接口,它提供了键值对的存储和管理机制。Map接口的实现类有很多,包括HashMap、TreeMap、LinkedHashMap等,每种实现类都有其特点和使用场景...
java 集合和泛型 1. Map接口 2. HashMap底层实现 3. Hash数据结构和算法 4. 红黑树数据结构和算法
计算机后端-Java-Java核心基础-第25章 集合02 07. Map接口及其多个实现类的对比.avi
内容为 7号信令 通信协议 以及接口的学习,适用于通信运维人员,以及开发人员学习
浅析Java8 中 Map 接口的新方法 Java8 中 Map 接口的新方法是指 Java8 中引入的一些新的方法,用于提高 Map 接口的使用效率和便捷性。在本文中,我们将详细介绍 Java8 中 Map 接口的新方法,并通过代码实例来演示其...
`async-map`是一个专门针对异步Map操作的库,它提供了异步版本的Map接口,使得开发者能够在处理大量数据时,避免阻塞主线程,从而提高程序的并发性能。这个库不仅定义了异步Map接口,还包含了一些实用工具,帮助...