Java笔记(二十三)……Map集合

Map接口

Map<K,V>

该集合存储的是键值对,成对往集合里存,而且要保证键的唯一性

常用方法

添加

V
put(K key, V value)

void
putAll(Map<? extends K,? extends V> m)

删除

void
clear()

V
remove(Object key)

判断

boolean
isEmpty()

boolean
containsKey(Object key)

boolean
containsValue(Object value)

获取

V
get(Object key)

int
size()

Set<Map.Entry<K,V>>
entrySet()

Set<K>
keySet()

Map集合的两种取出方式

第一种:Set<K> keySet

将Map中的所有键存入到Set集合中。

因为Set具备迭代器,可以迭代方式遍历所有的键

再通过Map的get方法获取对应的value

第二种:Set<Map.Entry<K,V>> entrySet()

将Map集合中的映射关系存放到Set集合中

而这个映射关系我们称之为Map.Entry

Entry其实就是Map中的一个静态内部接口

 

   1: public static void main(String[] args) 
   2: {
   3:     //创建一个HashMap集合
   4:     Map<String,String> m = new HashMap<String,String>();
   5:     
   6:     //存入一些键值对
   7:     m.put("1","A");
   8:     m.put("2","B");
   9:     m.put("3","C");
  10:  
  11:     //获取存放键值对的Set集合
  12:     Set<Map.Entry<String,String>> se = m.entrySet();
  13:     
  14:     //获取Set集合的迭代器
  15:     Iterator<Map.Entry<String,String>> ie = se.iterator();
  16:     
  17:     //遍历读取集合中的键值对,并打印
  18:     while(ie.hasNext())
  19:     {
  20:         Map.Entry<String,String> me = ie.next();
  21:         System.out.println("num = "+me.getKey()+"; name = "+me.getValue());
  22:     }
  23: }

Map子类

HashTable

底层的数据结构是哈希表

不可以存入null键null值,线程同步,效率低,后期被HashMap取代

HashMap

底层的数据结构是哈希表

允许存入null键null值,线程不同步

TreeMap

底层的数据结构是二叉树

线程不同步,可以用于给map集合中的键进行排序(通过比较器或者自然排序)

Set集合底层应用的就是TreeMap集合

Map扩展知识

Map集合都是被使用到映射关系上

所以,存在一对多的映射关系,如下:

Map<String,Map<String,String>>

Map<String,List<Student>>

Map应用

字符串统计字数

   1: /*
   2: 
   3: "abcabcdea"
   4: 打印字母出现的次数
   5: 例子 a(3) b(2)
   6: */
   7: import java.util.*;
   8: class MapTest 
   9: {
  10:     public static void main(String[] args) 
  11:     {
  12:         //测试字符串
  13:         String s = "abcabc123dea";
  14:         
  15:         //创建Map对象存放对应字母
  16:         Map<Character,Integer> map = new TreeMap<Character,Integer>();
  17:         
  18:         //循环遍历字符串
  19:         for(int i = 0 ; i < s.length() ; i ++)
  20:         {
  21:             //建立char的对象封装字母
  22:             Character c = new Character(s.charAt(i));
  23:                 
  24:             //如果包含该字母,对应value+1,否则存入该新的键值对,value为1,代表次数为1
  25:             if(map.containsKey(c))
  26:             {
  27:                 map.put(c,map.get(c)+1);
  28:             }
  29:             else
  30:                 map.put(c,1);
  31:         }
  32:  
  33:         //取出对应关系,并打印
  34:         Set<Map.Entry<Character,Integer>> entrySet = map.entrySet();
  35:  
  36:         Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
  37:  
  38:         while(it.hasNext())
  39:         {
  40:             Map.Entry<Character,Integer> entry = it.next();
  41:             Character c = entry.getKey();
  42:             Integer i = entry.getValue();
  43:             System.out.println(c+"("+i+")");
  44:         }    
  45:     }
  46: }

posted @ 2013-10-22 15:24  ShawnWithSmallEyes  阅读(430)  评论(0编辑  收藏  举报