一.Map实现类的结构
-
Map为双列数据,存储key-value对(即键值对)的数据,类似于高中学习的函数: y = f(x)
-
HashMap: 作为Map的主要实现类
线程不安全,效率高,可以存储null的key和value
-
LinkedHashMap:
保证在遍历map元素时,可以按照添加的顺序实现遍历
原因: 在原有的HashMap底层结构的基础上,又添加了一对指针,指向前一个元素和后一个元素,因此可以实现按照添加的顺序遍历
对于频繁的便利操作,LinkedHashMap的执行效率高于HashMap
-
-
TreeMap:
保证按照添加的key-value对进行排序,实现排序遍历.此时需要考虑key的自然排序或定制排序
底层采用红黑树的存储结构
-
Hashtable:
作为古老的实现类,线程安全,执行效率低,不能存储null的key-value
-
Properties:
常用来处理配置文件,key和value都为String类型
-
-
二.Map结构的理解
Map中存储的key-value的特点:
-
key:
无序,不可重复,,使用set存储所有的key
key所在的类要重写equals()和hashCode()方法
-
value:
无序,可重复的,使用Collection存储所有的value
value所在的类要重写equals()方法
-
一个键值对:
key-value构成了一个Entry对象
-
Map中的entry:
无序,不可重复的,使用set存储所有的entry
-
一个key对应一个value
三.Map接口中的常用方法
1.添加,删除,修改操作:
-
Object put(Object key,Object value):
//将指定key-value 添加到(或修改)当前map对象中
-
putAll(Map m):
//将m中的所有key-value对存放到当前map中
-
remove(key):
//移除指定key的key-value对,并返回value
-
clear():
//清空当前map中的所有数据,与map=null操作不同
HashMap<String,Integer> map = new HashMap<String, Integer>();
map.put("a",10); //使用put方法添加元素
map.put("f",5);
map.put("s",24);
map.put("b",10);
map.put("b",14);
map.remove("s"); //使用remove方法调用元素
System.out.println(map);
2.元素查询操作:
-
get(key):
//获取指定key对应的value
-
boolean containsKey(key):
//是否包含指定的key
-
boolean containsValue(value):
//是否包含指定的value
-
int size():
//返回map中的key-value对的个数
-
boolean isEmpty():
//判断当前map是否为空
-
boolean equals(obj):
//判断当前map和参数obj是否相等
System.out.println(map.get("s")); //获取"s"位置上的元素
System.out.println(map.containsKey("z")); //判断是否包含key"z"
System.out.println(map.containsValue("11")); //判断是否包含value"11"
int a = map.size(); //获取长度
System.out.println(a);
3.元视图操作的方法:
-
Set keySet():
//返回所有key构成的Set集合
-
Collection values():
//返回所有value构成的Collection集合
-
Set entrySet():
//返回所有key-value对构成的Set集合
HashMap<String,Integer> map = new HashMap<String, Integer>();
map.put("a",10);
map.put("f",5);
map.put("s",24);
map.put("b",10);
map.put("b",14);
//使用keySet()方法遍历key
Set<String> skey = map.keySet();
System.out.println(skey);
//使用values()方法遍历value
Collection cvalue = map.values();
System.out.println(cvalue);