Java集合之Map
来源:互联网 发布:java字符日期格式化 编辑:程序博客网 时间:2024/06/06 04:40
转载请注明出处
图Map是一种依照键值存储元素的容器。键值与下标类似。在List中,下标是整数;而在Map中,键值可以是任意类型的对象。图中不能有重复的键值,每个键值对应一个值。一个键值和它的对应值构成一个条目,真正在图中存储的是这个条目。图的类型:散列图(HashMap)、链式散列图(LinkedHashMap)、树形图(TreeMap)等。这些图的通用特性都定义在Map接口中。
对于定位一个值、插入一个映射以及删除一个映射而言,HashMap类是高效的。LinkedHashMap类用链表实现来扩展HashMap类,它支持图中条目的排序。HashMap类中的条目是没有顺序的,但是在LinkedHashMap中,元素可以按照它们插入图的顺序排序(称为插入顺序),也可以按它们被最后一次访问时的顺序,从早到晚排序(称为访问顺序)。无参构造方法是以插入顺序来创建LinkedHashMap对象的。要按访问顺序创建LinkedHashMap对象,应使用构造方法LinkedHashMap(initialCapacity, loadFactor, true)。TreeMap在遍历排好序的键值时是很高效的。键值可以使用Comparable接口或Comparator接口来排序。
SoredMap接口是Map的一个子接口,使用它课确保图中的条目是排好序的。除此之外,它还提供方法firstKey()和lastKey()来返回图中的第一个和最后一个键值,而方法headMap(toKey)和tailMap(fromKey)分别返回键值小于toKey的那部分图和键值大于或等于fromKey的那部分图。
NavigableMap接口扩展了SoredMap,以提供导航方法lowerKey(key)、floorKey(key)、ceilingKey(key)和higherKey(key)来分别返回小于、小于或等于、大于或等于、大于某个给定键值的键值,如果没有这样的键值,它们都会返回null。方法pollFirstEntry()和pollLastEntry()分别删除并返回树图中的第一个和最后一个条目。
Java2以前,一般使用java.util.HashTable来映射键值和元素。为了适应Java集合框架,Java对Hashtable进行了重新设计,但是为了向后兼容保留了所有方法。 Hashtable实现了Map接口,除了Hashtable具有同步功能之外,它与HashMap的用法是一样的。
下面给出一个例子创建了一个散列图、一个链式散列图和一个树形图,以建立员工和年龄直接的映射关系。
import java.util.HashMap;import java.util.LinkedHashMap;import java.util.Map;import java.util.TreeMap;/** * @author lxd * 2015-06-14 */public class TestMap { public static void main(String[] args) { Map<String, Integer> hashMap = new HashMap<String, Integer>(); hashMap.put("ZhangSan", 30); hashMap.put("LiSi", 29); hashMap.put("WangWu", 32); hashMap.put("HeLiu", 27); System.out.println("entries in HashMap"); System.out.println(hashMap); //从一个散列图来创建一个树形图 Map<String, Integer> treeMap = new TreeMap<String, Integer>(hashMap); System.out.println("\nentries in ascending order of key:(升序)"); System.out.println(treeMap); //按访问顺序排序是链式散列图 Map<String, Integer> linkedHashMap = new LinkedHashMap<String, Integer>(16, 0.75f, true); linkedHashMap.put("ZhangSan", 30); linkedHashMap.put("LiSi", 29); linkedHashMap.put("WangWu", 32); linkedHashMap.put("HeLiu", 27); System.out.println("\nthe age for for " + "LiSi is " + linkedHashMap.get("LiSi").intValue()); System.out.println("\nentries in LinkedHashMap"); System.out.println(linkedHashMap); }}
结果:
entries in HashMap{HeLiu=27, WangWu=32, ZhangSan=30, LiSi=29}entries in ascending order of key:(升序){HeLiu=27, LiSi=29, WangWu=32, ZhangSan=30}the age for for LiSi is 29entries in LinkedHashMap{ZhangSan=30, WangWu=32, HeLiu=27, LiSi=29}
如输出所示,HashMap中条目顺序是随机的,TreeMap中的条目是按键值的升序排列的,LinkedHashMap中的条目是按元素最后一次被访问的时间从早到晚排序的。如果更新图时不需要保持图中元素的顺序,就使用HashMap;如果需要保持图中元素的插入顺序或访问顺序,就使用LinkedHashMap;如果需要使图按照键值排序,就使用TreeMap。
WeakHashMap类的每一个key对象保存了实际对象的弱引用,当系统回收了该key所对应的实际对象之后,WeakHashMap会自动删除该key对应的key-value对。该类可以用来做缓存的时候使用和内存管理有关。具体可以参考Java弱引用与WeakHashMap
- Java集合之-Map集合
- java之Map集合
- Java集合之Map
- Java集合之Map
- Java集合之Map
- Java集合之Map
- JAVA 集合之MAP
- java集合之Map
- java 集合之Map
- Java集合之Map
- Java集合之Map
- Java集合之Map
- Java集合之Map
- java集合之Map
- java集合之Map
- Java集合之Map
- Java集合之Map
- Java-集合之Map
- gradle
- window和linux的hosts文件位置
- OC-字典(1)
- FaceBook/infer-linter静态代码分析
- json和js对象之间的互相转换
- Java集合之Map
- 我来谈谈ViewPager搭配FragmentAdapter的数据丢失问题
- HDU-1062
- Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
- 自己按照书上实现的c语言的单链表
- 关于springmvc配置文件放在非默认位置
- 进程调度算法之“先来先服务”、“短任务优先”和“时间片轮选”
- 黑马程序员------------------局部内部类 匿名内部类
- Java输入/输出流