java集合专题4:map接口的实现–java集合详解

一、Map概述

ava.util 中的集合类包含 Java 中某些最常用的类。最常用的集合类是 List 和 Map。List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象元素列表。List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。Map 集合类用于存储元素对(称作“键”和“值”),其中每个键映射到一个值。从概念上而言,您可以将 List 看作是具有数值键的 Map。而实际上,除了 List 和 Map 都在定义 java.util 中外,两者并没有直接的联系。本文将着重介绍核心 Java 发行套件中附带的 Map,同时还将介绍如何采用或实现更适用于您应用程序特定数据的专用 Map。

二、Map常用方法

添加、删除操作:

Object put(Object key,Object value)

Object remove(Object key)

void putAll(Map t)

void clear()

元视图操作的方法:

Set keySet()

Collection values()

Set entrySet()

元素查询的操作:

Object get(Object key)

boolean containsKey(Object key)

boolean containsValue(Object value)

int size()

boolean isEmpty()

boolean equals(Object obj)

三、Map实现类之一:HashMap()

Map接口的常用实现类:HashMap、TreeMap和Properties。

HashMap是 Map 接口使用频率最高的实现类。

允许使用null键和null值,与HashSet一样,不保证映射的顺序。

HashMap 判断两个 key 相等的标准是:两个 key 通过 equals() 方法返回 true,hashCode 值也相等。

HashMap 判断两个 value相等的标准是:两个 value 通过 equals() 方法返回 true。

 
  1. @Test
  2. public void test2(){
  3.     /**
  4.      * 如何遍历Map
  5.      * Set keySet()
  6.      * Collection values()
  7.      * Set entrySet()
  8.      */
  9.     Map map = new HashMap();
  10.     map.put("AA" , 213);
  11.     map.put("BB" , 456);
  12.     map.put("BB"45);
  13.     map.put(123 , "CC");
  14.     map.put(null , null);
  15.     map.put(new Person("DD" , 23), 89);
  16.     map.put(new Person("DD" , 23), 87);
  17.     //1.遍历key集。
  18.     Set set = map.keySet();
  19.     for(Object object : set){
  20.         System.out.println(object);
  21.         System.err.println();
  22.     }
  23.     //2.遍历value集
  24.     Collection values = map.values();
  25.     Iterator iterator = values.iterator();
  26.     while(iterator.hasNext()){
  27.         System.out.println(iterator.next());
  28.     }
  29.     //3.如何遍历key-value对。
  30.         //方式一:
  31.     Set set2 = map.keySet();
  32.     for(Object obj : set2){
  33.         System.out.println(obj + "--->" + map.get(obj));
  34.     }
  35.         //方式二:
  36.     Set set3 = map.entrySet();
  37.     for (Object obj : set3) {
  38.         Map.Entry entry = (Map.Entry)obj;
  39.         System.out.println(entry.getKey() + "=" + entry.getValue());
  40.         System.out.println(entry);
  41.     }
  42. }

四、Map实现类之二:LinkedHashMap()

LinkedHashMap 是 HashMap 的子类

与LinkedHashSet类似,LinkedHashMap 可以维护 Map 的迭代顺序:迭代顺序与 Key-Value 对的插入顺序一致

 
  1. @Test
  2.     public void test3(){
  3.         Map map = new LinkedHashMap();
  4.         map.put("AA" , 213);
  5.         map.put("BB" , 456);
  6.         map.put("BB"45);
  7.         map.put(123 , "CC");
  8.         map.put(null , null);
  9.         map.put(new Person("DD" , 23), 89);
  10.         Set set2 = map.keySet();
  11.         for(Object obj : set2){
  12.             System.out.println(obj + "--->" + map.get(obj));
  13.         }
  14.     }

五、Map实现类之三:TreeMap()

TreeMap存储 Key-Value 对时,需要根据 key-value 对进行排序。TreeMap 可以保证所有的 Key-Value 对处于有序状态。

TreeMap 的 Key 的排序:

自然排序:TreeMap 的所有的 Key 必须实现 Comparable 接口,而且所有的 Key 应该是同一个类的对象,否则将会抛出 ClasssCastException

定制排序:创建 TreeMap 时,传入一个 Comparator 对象,该对象负责对 TreeMap 中的所有 key 进行排序。此时不需要 Map 的 Key 实现 Comparable 接口

TreeMap判断两个key相等的标准:两个key通过compareTo()方法或者compare()方法返回0。

若使用自定义类作为TreeMap的key,所属类需要重写equals()和hashCode()方法,且equals()方法返回true时,compareTo()方法应返回0。

 
  1. @Test  
  2.     public void test4(){  
  3.         Map map = new TreeMap();      
  4.         map.put(new Person("AA" , 23),89);  
  5.         map.put(new Person("MM" , 22),79);  
  6.         map.put(new Person("GG" , 33),99);  
  7.         map.put(new Person("JJ" , 13),69);  
  8.           
  9.         Set set = map.keySet();  
  10.         for(Object o : set){  
  11.             System.out.println(o + "--->" + map.get(o));  
  12.         }  
  13.     }  
weinxin
我的微信
有问题微信找我
DannyWu

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: