Collection--Map

来源:互联网 发布:网络知识培训手机 编辑:程序博客网 时间:2024/04/30 13:31

Map:是集合框架中的另一个分支,所以也是一个容器,具有作为一个容器基本的特征,如增删改查。里面也运用了泛型,但是通过查阅API我们发现,里面泛型的使用是两个,所以map集合里面存储的东西是一个一个的键值对,且要保证键的唯一性。

map下面有三个重要的小弟,分别是HashTable,hashMap,treeMap

HashMap:底层的数据结构是哈希表,可以使用null作为键和值,线程是不同步的,效率较高,在jdk1.2之后出现的

HashTable:底层数据结构是哈希表,不可以使用null作为键和值,线程是同步的,但是效率低,是jdk1.0就有的。因为和hashMap大致相同,现在基本上都用hashMap

treeMap:底层数据结构是二叉树,线程是 不同步的,但是因为是二叉树的结构,所以可以用于给map集合中的键排序

*其实set集合的底层就是运用的map集合


对于map集合的基本方法,常用的大致如下:

1:增:

put(K key ,V Value);在添加元素时,如果出现相同的键,后添加的值会覆盖原来的值,但是put方法会返回被覆盖的值

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

2:删:

clear();

3:判断:

containsValue(Object value)
containsKey(Object key)
isEmpty()

4:获取:

get(Object key):这个获取的是键值对中的键值
size();大小
values();获取键值对中的值,打印的时候键和值中间用等号连接


上面的方法和一般的获取方法没有什么区别,值得注意的是下面的两个方法
entrySet():获取键值对的映射关系的set集合,这个关系的数据类型就是Map.Entry。(Map.Entry其实就是Map接口的一个内部接口)
keySet():获取键值对中键的set集合,因为set集合具有迭代器,所以再通过set集合中的迭代器来获取键对应的值

import java.util.*;class MapDemo2{public static void main(String []args){Map<String ,String > map=new HashMap<String,String>();map.put("02","zhangsan2");map.put("03","zhangsan3");map.put("01","zhangsan1");map.put("04","zhangsan4");//将map集合中的映射关系取出存入到set集合中Set<Map.Entry<String,Sting>> entrySet=map.entrySet();Iterator <Map.Entry<String ,String >> it=entrySet.iterator();while(it.hasNext()){Map.entry<String,String> me=it.next();String key=me.geyKey();String value=me.getValeu();System.out.println(key+":"+value);}//先获取map集合的所有键的set集合,keySet()Set<String> keySet=map.keySet ();//有了set集合,就可以获取其迭代器Iterator <String> it=KeySet.iterator();while(it.hasNext()){String key=it.next();//有了键,可以通过map集合的get方法获取其对应的值String value =map.get(key);System.out.println("key:"+key+",valeu:"+value);}}}
以上是对两个方法的基本实现,在entrySet方法演示中,先肯定首先要建立映射关系的set集合,集合中泛型的接受的数据类型就是前面提到的Map.Entry,接下来调用set集合的迭代器,迭代器中的泛型接受的肯定也是和集合相同的类型,然后就是迭代器的基本操作。

对于keySet方法,基本步骤和entrySet方法,相同,刚开始自己写这个代码的时候,总是理不清,不像老师写的时候,思路那么顺,所以一定要先理清思路。













0 0