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方法,相同,刚开始自己写这个代码的时候,总是理不清,不像老师写的时候,思路那么顺,所以一定要先理清思路。