Map和Set
二叉搜索树又称二叉排序树
若它的左子树不为空,则左子树上所有节点的值都小于根节点的值
若它的右子树不为空,则右子树上所有节点的值都大于根节点的值
它的左右子树也分别为二叉搜索树
最优情况下,二叉搜索树为完全二叉树,其平均比较次数为
最差情况下,二叉搜索树退化为单支树,其平均比较次数为 N
纯 key 模型 Set中只存储了Key
Key-Value 模型 Map中存储的就是key-value的键值对
Map 的使用
Map是一个接口类,该类没有继承自Collection,该类中存储的是结构的键值对,并且K一定是唯一的,不能重复。
注意:Map.Entry并没有提供设置Key的方法
注意:
- Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap
- Map中存放键值对的Key是唯一的,value是可以重复的
- 在Map中插入键值对时,key不能为空,否则就会抛NullPointerException异常,但是value可以为空
- Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
- Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
- Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入
- TreeMap和HashMap的区别
Set
Set与Map主要的不同有两点:
- Set是继承自Collection的接口类,
- Set中只存储了Key
注意:
- Set是继承自Collection的一个接口类
- Set中只存储了key,并且要求key一定要唯一
- Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
- Set最大的功能就是对集合中的元素进行去重
- 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础 上维护了一个双向链表来记录元素的插入次序。
- Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
- Set中不能插入null的key。
TreeSet 和 HashSet的区别
Set set = new HashSet<>();
Iterator it = set.iterator();//迭代器
while (it.hasNext()) {
System.out.println(it.next());
}