Map
映射关系(Key-Value:Entry)
说明
可将Map看成并在一起的集合:{A集合 B集合}
A集合当中的每一个元素,都可以在B集合当中找到一个唯一与之对应的值
A集合当中的每一个元素,称之为Key,B集合当中的每一个元素,称之为Value
A集合当中的元素不能重复(Set),B集合当中的元素可以重复(List)
Map 可当作一个字典(dict:Dictionary)
Map中的元素无序(Key是Set)
一些常用的方法
put() 向Map的AB两个集合中添加元素,并且关联在一起
containsKey() 是否包含出入的Key
keySet() 返回Key集合
values() 返回Value集合
remove() 根据Key来删除Key-Value
clear() 清空Map当中所有的Key-Value
size() 获取Map的长度(Map当中Key-Value的个数)
get() 根据Key获取对应的Value
entrySet() 获取所有的Key-Value对象(Entry对象)
Map的遍历
Map<String, Integer> map = new HashMap<>();
方式一:
put()添加的Key值已经存在时,此次添加的Value值会将原来的Value值给替换掉(可理解为修改),并返回原来的值
获取所有的元素(遍历)
Map中没有迭代器(集合没有迭代器,就不能使用快速遍历foreach,Map不能快速遍历)
取出所有的Key:keySet()
根据取出的每一个Key,得到对应的Value:get()
Set<String> key = map.keySet();
Iterator<String> it = key.iterator();
while(it.hasNext()){
String k = it.next();
Object v = map.get(k);
System.out.println(k + " = " + v);
}
---------------------------------------------
简化:
取出的Key是Set,可快速遍历
for (String kk : map.keySet()) {
System.out.println(kk + " = " + map.get(kk));
}
方式二(推荐):
获取所有的Key-Value对象(Entry)
Entry是定义在Map内部的一个接口
Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); //获取每个Entry对象
Iterator<Entry<String, Integer>> it = entrySet.iterator(); //Entry有迭代器
while(it.hasNext()) { //遍历Entry
Entry<String, Integer> en = it.next(); //取出每个Entry
String key = en.getKey(); //得到每个Entry的Key
Integer value = en.getValue(); //得到每个Entry的Value
System.out.println(key + " = " + value);
}
---------------------------------------------
简化:
for (Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + " = " + entry.getValue());
}
HashMap与HashTable的异同
共同点:
都是用哈希算法实现的
都是双列集合(K-V)
不同点:
HashMap:线程不安全,效率较高
HashTable:线程安全,效率较低
HashMap:可以存储null
HashTable:不能存储null