Map:
双列数据,存储key-value对的数据
HashMap:
作为map的主要实现类,线程不安全,效率高,可以存储null的key和value
Hashtable
作为古老的实现类,线程安全的,效率低,不能存储null的key和value
LinkedHashMap
保证在遍历map元素时,可以按照添加的顺序实现遍历,对于频繁地遍历操作,此类执行效率高于HashMap
TreeMap
保证按照添加的key-value对进行排序,实现排序遍历。此时考虑key的自然排序或定制排序
Properties
常用来处理配置文件,key和value都是String类型
Map结构理解
Map中的key:无序、不可重复,使用set存储所有的key
Map中的value:无序、可重复,使用collection存储所有的value
一个键值对:key-value构成一个entry对象
Map中的entry:无序不可重复,使用set存储所有的entry
HashMap的底层实现原理
//在实例化以后,底层创建了长度为16的Entry[] table
HashMap map = new HashMap();
...
//首先,调用key1所在类的hashCode()计算key1哈希值
//此哈希值经过某种算法计算之后,得到在Entry数组中的存放位置
//如果此位置上的数据为空,此时的key1-value1添加成功
//如果此位置上的数据不为空且key1的哈希值与已经存在的数据的哈希值都不相同,则key1-value1添加成功
//如果此位置上的数据不为空且key1的哈希值与已经存在的某个数据(key2-value2)的哈希值相同,则继续比较,调用key1所在类的equals()方法
//如果equals()方法返回false,则key1-value1添加成功
//如果equals()方法返回true,使用value1替换value2
map.put(key1,value1);
...
默认的扩容方式:扩容到原来容量的二倍,并将原有的数据复制过来
常用方法
Object put(Object key,Object value):将指定的key-value添加到当前map对象中
Object putAll(Map m):将m中的key-value对存放到当前的map对象中
Object remove(Object key):移除指定key的key-value对,并返回value
void clear():清空当前map中的所有数据
Object get(Object key):获取指定key对应的value
boolean containsKey(Object key):是否包含指定的key
boolean containsValue(Object value):是否包含指定的value
int size():返回map中key-value对的个数
boolean isEmpty():判断map是否为空
boolean equals(Object obj):判断map与obj是否相等
Set keySet():返回所有key构成的set集合
Collection values():返回所有value构成的collection集合
Set entrySet():返回所有key-value对构成的set集合
Collections工具类
reverse(List):反转list中元素的顺序
shuffle(List):对list集合元素进行随机的排列
sort(List):根据元素的自然排序对指定List集合元素按升序排序
sort(List,Comparator):根据指定Comparator产生的顺序对List集合进行排序
swap(List,int,int):将指定List中的i处元素和j处元素进行交换
Object max(Collection):根据元素的自然排序,返回给定集合中的最大元素
Object max(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
Object min(Collection):根据元素的自然排序,返回给定集合中的最大元素
Object min(Collection,Comparator):根据Comparator指定的顺序,返回给定集合中的最大元素
int frequency(Collection,Object):返回指定集合中指定元素的出现次数
void copy(List dest,List src):将src的内容复制到dest中
boolean replaceAll(List list,Object oldVal,Object newVal):使用新值替换list中的所有旧值
Collections类中提供多个synchronizedXxx()方法,该方法可将指定集合包装为线程同步的集合,从而可以解决多线程并发访问集合时的线程安全问题