Map集合
Map与Collection的关系
Map与Collection在集合框架中属并列存在
Map存储的是键值对
Map存储元素使用put方法,Collection使用add方法
Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
Map集合中键要保证唯一性
Map与Collection在集合框架中属并列存在
Map存储的是键值对
Map存储元素使用put方法,Collection使用add方法
Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
Map集合中键要保证唯一性
Map体系结构
Map和Set很像 ,Set底层就是使用了Map集合。Set中元素就想当与Map的key。
该集合存储键值对。一对一对往里存。而且要保证键的唯一性。
Map有三个子类。
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。 此集合在jdk1.0时就存在,效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。 它将hashtable替代,jdk1.2时出现,效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排 序。
Map中的方法
1,添加
put(K key, V value) 新加入一对键值
putAll(Map<? extends K,? extends V> m)
此处用到泛型,意思是将一个Map集合加入到调用此方法的Map集合。这个新加入的Map集合
的键和值都是调用者的子类。
2,删除
clear() 删除所有键值对,
remove(Object key) 移除指定的键值对
3,判断
containsValue(Object value) 判断是否存在指定值的键值对。
containsKey(Object key) 判断是否存在指定键的键值对。
isEmpty() 判断是否为空
4,获取
get(Object key) 通过键获取值
size()
values() 返回值的集合。
entrySet() 返回一个Set,其中元素为一个键值对,在api中用Map.Entry表示
keySet() 返回一个Set,其中元素是Map的key
Map<String,String> map = new HashMap<String,String>();
//添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。
//并put方法会返回被覆盖的值。
System.out.println("put:"+map.put("01","zhangsan1"));
System.out.println("put:"+map.put("01","wnagwu"));
map.put("02","zhangsan2");
map.put("03","zhangsan3");
System.out.println("containsKey:"+map.containsKey("022"));
//System.out.println("remove:"+map.remove("02"));
System.out.println("get:"+map.get("023"));
map.put("04",null);
System.out.println("get:"+map.get("04"));
//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。
//获取map集合中所有的值。
Collection<String> coll = map.values();
System.out.println(coll);
System.out.println(map);
如果要遍历Map中的元素,有两种思路
由于Map中没有迭代器,也没有List中的角标,所以不能直接便利。可以根据Map与Set的关系,通过Set来间接便利。
第一种,因为Set中的元素相当于Map的键,所以可以通过keySet方法可以将Map中的键提取,放到一 个Set集合中,然后通过遍历Set中的元素,并通过此元素调用Map的getValue方法获取Map的值,达到遍历Map的目的。
第二种,将Map中的一个键值对看做一个整体,通过entrySet方法将其当 做Set中的一 个元素,在api将其表示为Map.Entry 。这样遍历Set集合时,每次获取一个Map.Entry,然后通过调用getKey和getValue方法,取得键和值。
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。之所以定义在Map内部,是因为只有键值对存在于Map集合内部,Map最清楚键值结构,并且能提供相关操作。
第一种,因为Set中的元素相当于Map的键,所以可以通过keySet方法可以将Map中的键提取,放到一 个Set集合中,然后通过遍历Set中的元素,并通过此元素调用Map的getValue方法获取Map的值,达到遍历Map的目的。
第二种,将Map中的一个键值对看做一个整体,通过entrySet方法将其当 做Set中的一 个元素,在api将其表示为Map.Entry 。这样遍历Set集合时,每次获取一个Map.Entry,然后通过调用getKey和getValue方法,取得键和值。
Map.Entry 其实Entry也是一个接口,它是Map接口中的一个内部接口。之所以定义在Map内部,是因为只有键值对存在于Map集合内部,Map最清楚键值结构,并且能提供相关操作。
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
class MapDemo
{
public static void main(String[] args)
{
Map<String,String> map = new HashMap<String,String>();
//添加元素,添加元素,如果出现添加时,相同的键。那么后添加的值会覆盖原有键对应值。
//并put方法会返回被覆盖的值。
System.out.println("put:"+map.put("01","zhangsan1"));
System.out.println("put:"+map.put("01","wnagwu"));
map.put("02","zhangsan2");
map.put("03","zhangsan3");
System.out.println("containsKey:"+map.containsKey("022"));
//System.out.println("remove:"+map.remove("02"));
System.out.println("get:"+map.get("023"));
map.put("04",null);
System.out.println("get:"+map.get("04"));
//可以通过get方法的返回值来判断一个键是否存在。通过返回null来判断。
//获取map集合中所有的值。
Collection<String> coll = map.values();
System.out.println(coll);
System.out.println(map);
}
}
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,String>> entrySet = map.entrySet();
Iterator<Map.Entry<String,String>> it = entrySet.iterator();
while(it.hasNext())
{
Map.Entry<String,String> me = it.next();
String key = me.getKey();
String value = me.getValue();
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+",value:"+value);
}
*/
}
}