Map和List

MapList

当把Map中的key-value对当成单独的集合元素来对待时,MapSet就统一起来了。

Map集合是一个关联数组,它包含两组值:一组是所有key组成的集合,因为Map集合的key不允许重复,而且Map不会保存key加入的顺序,因此这些key可以组成一个Set集合;另外一组是value组成的集合,因为Map集合的value完全可以重复,而且Map可以根据key来获取对应的value,所以这些value可以组成一个List集合。实际上Mapvalues方法并未返回一个List集合。

import java.util.HashMap;

import java.util.TreeMap;

 

publicclass MapValueTest {

     publicstaticvoid main(String[] args){

       HashMap<String,Double> scores = new HashMap<String,Double>();

       scores.put("yuwen", 89.0);

       scores.put("shuxue", 83.0);

       scores.put("yingwen", 80.0);

       System.out.println(scores.values());

       System.out.println(scores.values().getClass());

       TreeMap<String,Double> health = new TreeMap<String,Double>();

       health.put("height", 173.0);

       health.put("weight", 71.0);

       System.out.println(health.values());

       System.out.println(health.values().getClass());

     }

}

Output

[83.0, 89.0, 80.0]

class java.util.HashMap$Values

[173.0, 71.0]

class java.util.TreeMap$Values

HashMapTreeMap2个集合的values()方法返回值确实是包含Map中所有value的集合,但它们并不是List对象,而分别是HashMap$Values对象和TreeMap$Values对象。

HashMapTreeMap22Map类的values()方法的实现完全相同。当程序第一次调用2Map对象的values方法时,它们会新建一个values对象,并将该values对象赋给values实例变量;当程序下次调用values()方法时,将直接以values实例变量作为返回值。由此可见,对于HashMapTreeMap而言,它们values()方法返回值的区别主要体现在各自values内部类的实现上。

从底层实现上来看,Set和Map很相似,如果从用法的角度来看,Map和List也有很大的相似之处:

Map接口提供了get(K key)方法允许Map对象根据key来取得value;

List接口提供了get(int index)方法允许List对象根据元素索引来取得value.

对于List接口而言,它仅按元素的加入顺序保存了一系列的Java对象。

Map和List底层实现了并没有太大的相似之上,只是在用法上存在一些相似之处;既可以是List相当于所有key都是int类型的Map,也可以说Map相当于索引是任意类型的List.

JS的对象有点类似于Map结构,也是多个key-value对组成,只是习惯上JS对象的key-value称为属性名,属性值。对于JS对象而言,除了可使用属性语法来方法属性值之外,完全可以用数组语法来访问它的属性值。

posted @ 2013-08-01 18:51  坚固66  阅读(301)  评论(0编辑  收藏  举报