概述
Map集合是键值对的存取,是没有继承collection接口的,在map中必须要做到key和value一一对应,且key不重复
map集合常用方法
(1)Object put(Object key, Object value); //将指定的“键-值”对存入Map中
(2)Object get(Object key); //返回指定键所映射的值
(3)Object remove(Object key); //根据指定的键把此“键-值”对从Map中移除。
(4)boolean containsKey(Object key); //判断此Map是否包含指定键的“键-值”对。
(5)boolean containsValue(Object value); //判断此Map是否包含指定值的“键-值”对。
(6)boolean isEmpty(); //判断此Map中是否有元素。
(7)int size(); //获得些Map中“键-值”对的数量。
(8)void clear(); //清空Map中的所有“键-值”对。
(9)Set keySet(); //返回此Map中包含的键的Set集。
(10)Collection values(); //返回此Map中包含的值的Collection集。
(11)Set<Map.Entry<K,V>> entrySet() 将所有包含键-值对的Map.Entry收集到Set
map集合特点
1.它的底层是用 哈希表 的数据结构
2.因为它的底层使用的是哈希表,所以它必须重写HashCode和equals方法。
3.线程不同步的。可以存储null键,null值
map集合实现
Map有五种实现类,分别为: HashMap 、TreeMap、 Hashtable 、properties、LinkedHashMap
HashMap
HashMap的底层主要是基于数组和 链表 来实现的,是通过计算散列码来决定存储的位置,访问速度快。该类允许null key存在,但会有hash冲突。
主要遍历的方法:
map.keySet(); // 利用键获取值
map.values(); //利用键获取值单纯利用值的集合
map.entrySet(); //利用键值对实体
TreeMap
TreeMap是一个有序的key-value集合,基于红黑树(Red-Black tree)的 NavigableMap实现。根据其键的自然顺序,或根据 Comparator进行排序
构造方法 :
TreeMap() 使用键的自然顺序构造一个新的、空的树映射。
TreeMap(Comparator<? super K> comparator) 构造一个新的、空的树映射,该映射根据给定比较器进行排序。
TreeMap(Map<? extends K,? extends V> m) 构造一个与给定映射具有相同映射关系的新的树映射,该映射根据其键的自然顺序 进行排序。
TreeMap(SortedMap<K,? extends V> m) 构造一个与指定有序映射具有相同映射关系和相同排序顺序的新的树映射。
HashTable
HashTable序列化且方法上都加了synchronized,所以线程是安全的。但需要注意:该实现类要实现同步需要使用synchronizedMap方法
遍历方式
1.ntry或key或value的集合;
2. 通过 Iterator 迭代器或者Enumeration遍历此集合。
3. 通过Iterator迭代器遍历Entry,或者是通过Enumeration遍历key、value的效率都比较高。
Properties
是一个比较特殊的集合,存储的是属性,属性名和属性值必须都是字符串类型的,可以和流结合使用
方法:
添加对象:setProperty();
获取键值:stringPropertyNames();
获取value值:getProperty(key);
LinkedHashMap
LinkedHashMap继承于HashMap,是链表和哈希表的结合,使用双向链表来维护Map的key-value的顺序,保持读取顺序和插入元素的顺序一致
构造方法:
LinkedHashMap(); //默认初始容量 (16)和默认负载因子(0.75)的空 LinkedHashMap
LinkedHashMap(int initialCapacity, float loadFactor); //指定初始容量和指定负载因子的空 LinkedHashMap
LinkedHashMap(int initialCapacity); //指定初始容量和默认负载因子 (0.75)的空 LinkedHashMap
LinkedHashMap(Map<? extends K, ? extends V> m); //指定 Map 具有相同映射的 LinkedHashMap
LinkedHashMap(int initialCapacity, float loadFactor, boolean accessOrder); // 指定初始容量和指定负载因子的具有指定迭代顺序的LinkedHashMap
总结
Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值
HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
TreeMap:底层是二叉树结构,可以对map集合中的键进行指定顺序的排序
Map自身没有遍历的方法,必须将其转换为Set集合然后遍历,转换的方法有两种:keySet();entrySet()
|–HashMap:底层是哈希表数据结构,是线程不同步的。可以存储null键,null值。替代了Hashtable.
|–Hashtable:底层是哈希表数据结构,是线程同步的。不可以存储null键,null值。