1.Map存储的是一个键值对(key-value)
2.在sesson、redis 、json 、HBase 中都有用到键值对。
3.Map的子类:
- HashMap:数组+链表(1.7)数组+链表+红黑树(1.8) //Key:无序,唯一 ;Value:无序,不唯一
- LinkedHashMap:链表 //有序的HashMap 可以按照插入顺序访问。
- TreeMap:红黑树 有序 //速度没有HashMap快
4.Set和Map的关系:采用了相同的数据结构——HashMap,Set只用HashMap中的Key存储数据 。
5.Map.Entry表示的是K-V组合的一组映射关系,key和value成组出现 。
6.HashMap允许key为null,value为null。
7.Map的一些常用方法:
1)put(k,v) :添加键值对。
2)clear() :清空map中的值。
3)remove(Object key, Object value):删除键值对。
4)isEmpty():Map是否为空。
5)size():map中键值对的数量。
6)containsKey(Object key):map中是否包含key值。
7)containsValue(Object value):map中是否包含value值。
8)get(Object key) :根据key值,返回value值。
8.遍历valus值得几种方法
1)通过map.entrySet()方法,获取Entry(键值对)的集合。然后通过遍历Entry(键值对)集合,获取key值和value值。
2)通过map.keySet()方法,获取key值的集合。然后通过遍历key值的集合,获取value值。
3)通过map.keySet()方法,获取key值的集合。然后获取集合的迭代器。通过迭代器遍历集合,获取value值。
4)通过map.values()方法,获取value值得集合。遍历集合,输出value的值。
public class MapDemo {
public static void main(String[] args) {
Map<String,Integer> map=new HashMap<>();
map.put("a",1);
map.put("b",2);
map.put("c",3);
map.put("d",4);
//1
System.out.println("第一种方式");
Set<Map.Entry<String, Integer>> entries = map.entrySet();
for(Map.Entry<String, Integer> entry:entries){
System.out.println(entry.getKey()+"-"+entry.getValue());
}
//2
System.out.println("第二种方式");
Set<String> keySets = map.keySet();
for(String str:keySets){
System.out.println(str+"-"+map.get(str));
}
//3
System.out.println("第三种方式");
Set<String> keySets2 = map.keySet();
for(Iterator<String> iterator=keySets2.iterator();iterator.hasNext();){
String key=iterator.next();
System.out.println(key+"-"+map.get(key));
}
//4
System.out.println("第四种方式");
Collection<Integer> values = map.values();
for(Integer value:values){
System.out.println(value);
}
}
}
--------------------------------------------------------------
运行结果:
第一种方式
d-4
b-2
c-3
a-1
第二种方式
d-4
b-2
c-3
a-1
第三种方式
d-4
b-2
c-3
a-1
第四种方式
4
2
3
1
总结:
1.Map存储的是键值对,是key-value。
2.Map的子类:HashMap,TreeMap,LinkedHashMap,HashTable。
3.在jdk1.7中,hashMap的存储结构是数组+链表。
在jdk1.8中,hashMap的存储结构是数组+链表+红黑树。
4.TreeMap的存储结构是红黑树。
5.HashMap和HashTable的区别?
1)HashMap中的key值和value值,都可以为null。但是HashTable中key值和value值,都不可以为null。
2)HashTable:线程安全,效率比较低;HashMap:线程不安全,效率比较高
6.Map中的一些基本操作也是增删改查。
7.遍历HashMap中value值,可以通过map.entrySet(),map.keySet(),map.values()实现。