http://blog.csdn.net/itlwc/article/details/10155669
分类:
版权声明:本文为博主原创文章,未经博主允许不得转载。
Map层次结构
Map
- 实现类
- HashMap,LinkedHashMap,Hashtable
- 子接口
- SortedMap
- 实现类
- TreeMap
- 映射集,键值集合
- Map增加对象时,如果key值在Map已经存在,将会替换原先value值
- Map里面的key值是不能重复的,value值可以重复
- Map的泛型不可以是基本数据类型,比如Map<int,int>报错
Map常用方法
- package com.itlwc;
- import java.util.HashMap;
- import java.util.Map;
- public class Test {
- public static void main(String[] args) {
- Map map = new HashMap();
- // 从此映射中移除所有映射关系
- map.clear();
- // 将指定的值与此映射中的指定键相关联
- map.put("a", "lwc");
- map.put("b", "nxj");
- // 从指定映射中将所有映射关系复制到此映射中
- map.putAll(new HashMap());
- // 如果存在此键的映射关系,则将其从映射中移除
- map.remove("b");
- // 返回此映射中的键-值映射关系数
- map.size();
- // 如果此映射未包含键-值映射关系,则返回 true
- map.isEmpty();
- // 返回此映射中映射到指定键的值
- map.get("a");
- // 如果此映射包含指定键的映射关系,则返回 true
- map.containsKey("a");
- // 如果此映射为指定值映射一个或多个键,则返回 true
- map.containsValue("nxj");
- // 返回此映射中包含的映射关系的 set 视图
- map.entrySet();
- // 返回此映射中包含的键的 set 视图
- map.keySet();
- // 比较指定的对象与此映射是否相等
- map.equals(new HashMap());
- // 返回此映射的哈希码值
- map.hashCode();
- // 返回此映射中包含的值的 collection 视图
- map.values();
- }
- }
遍历Map 获取Map值的方法
- package com.itlwc;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- public class Test {
- public static void main(String[] args) {
- Map map = new HashMap();
- map.put("a", "lwc");
- map.put("b", "nxj");
- // 方法一:
- Set set = map.keySet();
- Iterator ite1 = set.iterator();
- while (ite1.hasNext()) {
- String key = (String) ite1.next();
- String value = (String) map.get(key);
- System.out.println(key + ":" + value);
- }
- // 方法二:
- Set<Map.Entry> set1 = map.entrySet();
- Iterator<Map.Entry> ite2 = set1.iterator();
- while (ite2.hasNext()) {
- Map.Entry entry = (Map.Entry) ite2.next();
- String key = (String) entry.getKey();
- String value = (String) entry.getValue();
- System.out.println(key + ":" + value);
- }
- // 获取map中所有值对象的Collection集合
- Collection collection = map.values();
- for (Object c : collection) {
- String value = (String) c;
- System.out.println("值为: " + value + ",长度为 " + value.length());
- }
- }
- }
- /*
- 打印结果:
- b:nxj
- a:lwc
- b:nxj
- a:lwc
- 值为: nxj,长度为 3
- 值为: lwc,长度为 3
- */
HashMap
- HashMap和ArrayList是一个时代的产物
- 既不是Ordered也不是Sorted,该类通过对键计算哈希码来决定值的存储,
- 不保证键的存储顺序,HashMap允许键值为null,但只能出现一次
- 构造方法
- public HashMap()
- 初始容量为16
- public HashMap(Map m)
Hashtable
- HashTable和Vector是一个时代的产物,Hashtable对元素操作的方法为同步方法,
- 同一时刻只能有一个线程访问,没有特殊需求不使用
- 不允许null键的存在
- 构造方法
- public Hashtable()
- 初始容量为11
- public Hashtable(Map m)
Properties
- HashTable的一个子类,开发中经常使用
- Properties键和值都是字符串,开发中经常会用在配置文件,properties文件(属性文件)
- 一般通过文件读取的方式把key读入内存中,再使用getProperty()得到值
- package com.itlwc;
- import java.util.Iterator;
- import java.util.Properties;
- import java.util.Set;
- public class Test {
- public static void main(String[] args) {
- Properties p = new Properties();
- p.setProperty("1", "a");
- p.setProperty("2", "b");
- p.setProperty("3", "c");
- Set<Object> set = p.keySet();
- Iterator<Object> ite = set.iterator();
- while (ite.hasNext()) {
- String key = (String) ite.next();
- String value = p.getProperty(key);
- System.out.println(key + "=" + value);
- }
- }
- }
- /*
- 打印结果:
- 3=c
- 2=b
- 1=a
- */
LinkedHashMap
- LinkedHashMap是Ordered,采用双链表实现的
- 有固定顺序,也就是插入顺序
- 构造方法
- public LinkedHashMap()
- 初始容量为16
- public LinkedHashMap(int initialCapacity)
- public LinkedHashMap(Map m)
SortedMap接口
- 保证按照键的升序排列的映射,天然顺序
SortedMap常用方法
- Object firstKey()
- 返回有序映射中当前第一个(最小的)键
- Object lastKey()
- 返回有序映射中当前最后一个(最大的)键
- SortedMap headSet(Object toKey)
- 返回此有序映射的部分视图,其键值严格小于toKey
- SortedMap tailSet(Object fromKey)
- 返回此有序映射的部分视图,其键大于或等于fromKey
- SortedMap subSet(Object fromKey,Object toKey)
- 返回此有序映射的部分视图,其键值从fromKey(包括)到toKey(不包括)
- Comparator comparator()
- 返回与此有序映射关联的比较器,如果使用键的自然顺序,则返回null
TreeMap
- TreeMap是SortedMap接口的实现,键对象不论以什么顺序插入,在遍历的时候,都会以天然顺序遍历
- 构造方法
- public TreeMap()
- public TreeMap(SortedMap s)
- public TreeMap(Map m)
- public TreeMap(Comparator c)
- c指定比较器,与TreeSet相同,如果想要指定键的排序顺序,可以使用此构造器
- 因为TreeMap是带排序的,所以想要为TreeMap增加自定义类型,必须指定排序规则
TreeMap排序规则Comparator案例
- package com.itlwc;
- import java.util.Comparator;
- import java.util.Iterator;
- import java.util.Set;
- import java.util.TreeMap;
- public class Test {
- public static void main(String[] args) {
- TreeMap map = new TreeMap(new PersonComparator());
- map.put(new Person("lwc", 80), "1");
- map.put(new Person("nxj", 70), "3");
- map.put(new Person("lp", 60), "2");
- map.put(new Person("fy", 75), "4");
- Set set = map.keySet();
- Iterator ite = set.iterator();
- while (ite.hasNext()) {
- Person key = (Person) ite.next();
- String value = (String) map.get(key);
- System.out.println("编号:" + value + " 姓名:" + key.name + " 分数为:"
- + key.score);
- }
- }
- }
- class Person {
- String name;
- int score;
- public Person(String name, int score) {
- this.name = name;
- this.score = score;
- }
- }
- class PersonComparator implements Comparator {
- public int compare(Object o1, Object o2) {
- Person p1 = (Person) o1;
- Person p2 = (Person) o2;
- return p1.score - p2.score;
- }
- }
- /*
- 打印结果:
- 编号:2 姓名:lp 分数为:60
- 编号:3 姓名:nxj 分数为:70
- 编号:4 姓名:fy 分数为:75
- 编号:1 姓名:lwc 分数为:80