Map
1 Set
1.1 散列表
散列表 : 可以理解为数组保存元素是个链表
hashCode : hash算法,是把不定长的数据改变为定长的数据,是一种安全的加密算法,但不保证唯一
同一个对象生成多次hash值,那么值一定是相同的
不同对象也有可能生成相同的hash值
添加过程 :
1 先调用添加的K,调用hashCode生成hash值
2 根据hash值计算数组下标
3 判断数组中该下标对应的位置上是否有元素
3.1如果没有保存数据,就把该对象放到对应的下标中
3.2如果保存了数据,此时调用添加的K的equals方法,和数组中该下标对应的所有数据的key进行比较
3.3如果和数组下标对应的链表中的数据都不相等,就把该数据添加到对应的链表中
3.4如果和链表中的数据一致了,则key不添加,把value值替换(用新的替换原来的)
4 Java1.8改动,如果该链表中,节点个数大于7,则该链表被转换为红黑树
1.2 hashSet
2 Map
2.1 继承体系
2.2 map特性
Map : 无序 , key不可重复,value值可重复
Map和Collection不一样,但是操作基本上是一样的
集合保存单个对象,而map保存键值对映射关系
2.3 常用方法
常用方法 :
put(K,V) : 添加数据
remove(K) : 删除数据
clear() : 清空
size() : 个数
isEmpty() : 判断是否为空
get(K) : 根据Key获取value
values() : 获取所有的value,返回集合
containsKey(K) : 判断是否包含某个key
containsValue(V) : 判断是否包含某个value
Set keySet() : 获取map中所有的key,返回set
Set entrySet() : 获取map中的键值对,返回set
2.4 HashMap
map 不能直接遍历
将map转换为set,并把key和value封装到了entry类对象中,然后把entry类对象保存到set即可
getKey 是获取key,getValue是获取value
2.5 Properties
Properties : key和value强制要求必须是字符串
2.6 TreeMap
TreeMap : 保存的元素可以按照一定的规则进行排序
排序 :
1 要添加的元素,实现了Comparable接口
2 编写比较器类,实现Comparator接口
treeMap 在添加的时候,会自动调用key对象的compareTo方法,使用key进行比较,而不是value
2.7 面试题
Map转list并以value排序