Map集合

一.概述

Map集合没有继承Collection接口,它提供的是key到value的映射.Map中不能包含相同的key,一个key只能映射一个value.

Map集合产生一个散列码的整数值,散列码通常用作一个偏移量,该偏移量对应分配给映射的内存区域的起始位置,从而确定存储对象再映射中的存储位置.

Map集合包括Map接口以及Map接口的所有实现类


二.Map接口

常用方法:

方法	                             功能描述
put(K key,V value)	             向集合中添加key与value的映射关系
containsKey(Object key)	             如果此映射中包含key的映射关系返回true
containsValue(Object value)          如果此映射将一个或多个key映射到指定值就返回true
get(Object key)	                     如果存在指定的key对象,返回该对象对应的值,否则返回null
keySet()	                     返回该集合中所有key对象形成的Set集合
values()	                     返回该集合中所有值对象形成的Collection集合

举个栗子:

Map
     
     
      
       map = new HashMap<>();
map.put("1", "first");
map.put("2", "second");
Set
      
      
       
        set = map.keySet();//构建Map集合中所有key对象的集合
Iterator
       
       
        
         it = set.iterator();//创建集合迭代器
System.out.println("key集合中的元素为:");
while(it.hasNext()){
	System.out.println(it.next());
}
Collection
        
        
         
          coll = map.values();//构建Map集合中所有values值集合
it = coll.iterator();
System.out.println("values集合中的元素为:");
while(it.hasNext()){
	System.out.println(it.next());
}
        
        
       
       
      
      
     
     
输出结果为:
key集合中的元素为:
1
2
values集合中的元素为:
first
second

三.Map接口的实现类
Map接口实现类有HashMap,TreeMap,LinkedHashMap,WeakHashMap,ConcurrentHashMap,IdentityHashMap.

1)HashMap:
1.一般用HashMap类实现Map集合,因为HashMap是基于哈希表的Map接口的实现类,HashMap能通过哈希码对其内部的映射关系进行快速查找,添加和删除映射关系效率更高.另外hashCode()是根类Object的方法,因此Java的对象都能产生散列码
2.HashMap允许使用null值和null键,但必须要保证键的唯一性,它不保证映射的顺序,而且不保证该顺序恒久不变

2)LinkedHashMap:
类似于HashMap.为了提高速度,它散列化所有元素,但是迭代遍历它的时候,取得的键值对的顺序是它的插入次序(当你调用putAll()方法时,传进来的map的键值对顺序是什么样的,LinkedHashMap输出的顺序就是什么样的),或者是最近最少使用(LRU)的次序.只比HashMap慢一点,但是迭代访问时比较快,因为它使用列表维护内部次序

3 )TreeMap:
1.TreeMap中的映射关系存在一定的顺序,该顺序由Comparable和Comparator决定,它不仅实现了Map接口还实现了java.util.SortedMap接口(TreeMap是SortedMap现阶段的唯一实现),它的映射关系是根据键对象按照一定的顺序排列的,因此不允许键为null.
2.TreeMap带有subMap()方法,它可以返回一个子树.

4)WeakHashMap:
允许释放映射所指向的对象.如果映射之外没有引用指向某个"键",则此"键"可以被垃圾收集器回收.

5)ConcurrentHashMap:
线程安全的Map,不涉及同步加锁.

6)IdentityHashMap:
使用==代替equals()对键进行比较的散列映射.


下面举个例子看看HashMap与TreeMap输出的映射顺序:
Map
    
    
     
      map = new HashMap<>();
map.put("21", "二一");
map.put("22", "二二");
map.put("23", "二三");
map.put("24", "二四");
map.put("25", "二五");
map.put("11", "十一");
map.put("12", "十二");
map.put("13", "十三");
map.put("14", "十四");
map.put("15", "十五");
Set
     
     
      
       set = map.keySet();//构建Map集合中所有key对象的集合
Iterator
      
      
       
        it = set.iterator();//创建集合迭代器
System.out.println("HashMap:");
while(it.hasNext()){
	String key = (String)it.next();
	String value = (String)map.get(key);
	System.out.println(key + " " + value);
}
TreeMap
       
       
        
         treeMap = new TreeMap<>();
treeMap.putAll(map);
Iterator
        
        
          iter = treeMap.keySet().iterator(); System.out.println(); System.out.println("TreeMap:"); while(iter.hasNext()){ String key = (String)iter.next(); String value = (String)treeMap.get(key); System.out.println(key + " " + value); } 
        
       
       
      
      
     
     
    
    
输出结果为:
HashMap:
22 二二
11 十一
23 二三
12 十二
24 二四
13 十三
25 二五
14 十四
15 十五
21 二一

TreeMap:
11 十一
12 十二
13 十三
14 十四
15 十五
21 二一
22 二二
23 二三
24 二四
25 二五

可以看到HashMap类实现Map集合没有一定的映射顺序,而TreeMap则是根据key值的升序进行排列.(如果看不到效果,请增加样本容量).


以上面的代码为例,看一看TreeMap的几个方法:

firsKey():返回第一个Key

lastKey():返回最后一个Key

subMap(String fromKey, String toKet):返回从fromKey到toKey这个范围内的Map子集

headMap(String toKey):返回tokey之前的Map子集

tailMap(String fromKey):返回包括fromKey在内以及它之后的Map子集

代码如下:

System.out.println(treeMap.firstKey());
System.out.println(treeMap.lastKey());
System.out.println(treeMap.subMap("12", "21"));
System.out.println(treeMap.headMap("21"));
System.out.println(treeMap.tailMap("21"));

///
输出结果如下:
11
25
{12=十二, 13=十三, 14=十四, 15=十五}
{11=十一, 12=十二, 13=十三, 14=十四, 15=十五}
{21=二一, 22=二二, 23=二三, 24=二四, 25=二五}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值