一,Set集合--HashSet
1,HashSet底层实际上是一个HashMap,HashMap底层采用了哈希表数据结构。
2,哈希表又叫散列表,哈希表底层是一个数组,这个数组中每一个元素是一个单向链表。每个单项链表都有一个独一无二的hash值,代表数组的下标。在某个单向链表中的每一个节点上的hash值是相等的。
hash值实际上是key调用hashCode方法,再通过“hash function”转换成的值。
3,如何向哈希表中添加元素:
先调用被存储的key的hashCode方法,经过哈希函数得出hash值,如果在这个哈希表中不存在这个hash值,则直接加入元素。
如果该hash值已经存在,继续调用这个key的equals方法,如果equals方法返回false,则将该元素添加。如果equals方法返回true,则放弃添加该元素。
4,HashSet其实是HashMap中的key部分。HashMap中的key有什么特点,HashSet则有什么相同的特点。
5,HashMap和HashSet初始化容量都是16,默认加载因子是0.75
Hashtable初始化容量都是11,默认加载因子是0.75
二,Map集合
1,Map集合中常用的方法
void clear(); 清空Map
boolean isEmpty(); 判断该集合是否为空
int size(); 获取Map中键值对的个数
Object put(Object key , Object value); 向集合中添加键值对
Object get(Object key); 通过key获取value
boolean containsKey(Object key); 判断Map中是否包含这样的key
boolean containsValue(Object value); 判断Map中是否包含这样的value
Object remove(Object key); 通过key将键值对删除
Collection values(); 获取Map集合中所有的value
Set keySet(); 获取Map中所有的key
Set entrySet(); 返回此映射中包含的映射关系的Set视图(可以理解为输出键值对)
注意:存储在Map集合key部分的元素需要同时重写hashCode+equals方法
重写hashCode是为了散列均匀
重写equals方法是为了添加加入元素的判断标准
2,Properties(Hashtable的子类):也是由key和value组成,但是key和value都是字符串类型
3,SortedMap中的key特点:无序不可重复,但是存进去的元素可以按照大小自动排列
如果向自动排序key部分的元素需要:实现Comparable接口;单独写一个Comparator比较器