黑马程序员技术交流社区

标题: Map集合学习总结 [打印本页]

作者: 唐志兵    时间: 2012-6-12 13:45
标题: Map集合学习总结
看了两天的视频教程终于把Map集合这一章看完了,贴点学习笔记加源码。

map集合:该集合存储键值对。一对一对的往里存。而且要保证键的唯一性。

1,添加
put(K key, V value)
          将指定值与此映射中的指定键进行关联。
putAll(Map<? extends K,? extends V> map)
          将指定映射中的所有映射关系复制到此映射中。

2,删除   

clear()
从此映射中移除所有映射关系(可选操作)。

remove(Object key)
如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。

3,判断

containsKey(Object key)
如果此映射包含指定键的映射关系,则返回 true。

containsValue(Object value)
  如果此映射将一个或多个键映射到指定值,则返回 true。

4,获取

get(Object key)
返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。

values()
返回此映射中包含的值的 Collection 视图。

entrySet()
返回此映射中包含的映射关系的 Set 视图



Hashtable:底层是哈希表数据结构,不可以存入null键null值,该集合是线程同步的。

HashMap:底层是哈希表结构,可以存入null键null值,该集合是不同步的。除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。

TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合中的键进行排序。

Map集合和Set集合很像,Set底层就是使用了Map集合。


源码应用:
  1. import java.util.HashMap;
  2. import java.util.Map;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. import java.util.TreeMap;


  6. public class MapDemo {
  7.         public static void main(String[] args) {
  8.                 HashMap<MapClass, String> hm = new HashMap<MapClass, String>();
  9.                 hm.put(new MapClass("1hao", 19), "beijing");
  10.                 hm.put(new MapClass("2hao", 14), "shagnhai");
  11.                 hm.put(new MapClass("6hao", 15), "tianjin");
  12.                 hm.put(new MapClass("4hao", 17), "guangxi");
  13.                
  14.                
  15.                 Set<MapClass> s = hm.keySet();   //这是第一种方式枚举hashMap集合
  16.                 Iterator<MapClass> it = s.iterator();
  17.                 while(it.hasNext()){
  18.                         MapClass md = it.next();
  19.                         System.out.println(md + ":" + hm.get(md));
  20.                 }
  21.                
  22.                 System.out.println();
  23.                
  24.                 Set<Map.Entry<MapClass,String>> ss = hm.entrySet();        //这是第二种方式枚举hashMap
  25.                 Iterator<Map.Entry<MapClass,String>> it2 = ss.iterator();
  26.                
  27.                 while(it2.hasNext()){
  28.                         Map.Entry<MapClass,String> me = it2.next();
  29.                         System.out.println(me.getKey() + "..." + me.getValue());
  30.                 }
  31.                 //通过输出数据可以看出 hashMap是无序的
  32.                
  33.                 TreeMap<MapClass, String> tm = new TreeMap<MapClass, String>();
  34.                 tm.put(new MapClass("1hao", 19), "beijing");
  35.                 tm.put(new MapClass("2hao", 20), "shagnhai");
  36.                 tm.put(new MapClass("6hao", 15), "tianjin");
  37.                 tm.put(new MapClass("4hao", 17), "guangxi");     
  38.                
  39.                 System.out.println();
  40.                
  41.                 Set<MapClass> sss = tm.keySet();   //TreeMap集合里面元素枚举方法是跟HashMap一样的
  42.                 Iterator<MapClass> it3 = sss.iterator();
  43.                 while(it3.hasNext()){
  44.                         MapClass md = it3.next();
  45.                         System.out.println(md + ":" + tm.get(md));
  46.                 }
  47.                 //通过输出数据可以看出TreeMap是有序的,可以通过实现Comparable接口中的compareTo方法进行排序。
  48.                
  49.                
  50.         }
  51. }
  52.        


  53. class MapClass implements Comparable<MapClass>{
  54.         private String name;
  55.         private int age;
  56.         public MapClass(String name,int age) {
  57.                 this.name = name;
  58.                 this.age = age;
  59.         }
  60.        
  61.         public String getName(){
  62.                 return name;
  63.         }
  64.         public int getAge(){
  65.                 return age;
  66.         }

  67.         public int compareTo(MapClass o) {
  68.                 int num = this.getAge()>o.getAge() ? 1 : (this.getAge()== o.getAge()? 0:-1);
  69.                 if (num == 0)
  70.                         num = this.getName().compareTo(o.getName());
  71.                 return num;
  72.         }
  73.        
  74.         public int hashCode() {
  75.                 return name.hashCode() + age*30;
  76.         }

  77.         public boolean equals(MapClass mc) {
  78.                 return this.getName().equals(mc.getName()) && this.getAge() == mc.getAge();
  79.         }
  80.         public String toString(){
  81.                 return name + " ... " + age;
  82.         }

  83. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2