课程名称:笑傲Java面试 剖析大厂高频面试真题 秒变offer收割机
课程章节:
第2章 白板篇之Java编程
主讲老师:
求老仙
课程内容:
set接口中的方法?Set保证元素不重复?
Collection接口中的方法?
2-4 容器、集合、映射:实现Key-Value的LRU
课程收获:
Collection接口中的方法?
Size() 例如计算,链表的长度,是通过一个整数来计算的
isEmpty() 例如计算,队列是否为空,末尾-头 就能得出
ToArray( T[] a) 方法,传入一个数组的转换类型,如果传入的数组的长度是可以容纳对应的元素,就返回原来的数组,如何不能容纳,就创建一个新的数组。所以一般情况下是这样写的,直接创建一个新的数组。New String[0]
boolean containsAll(Collection<?> c); c集合是否全部包含在当前集合中,并且比较的是内存地址,不是值,因为集合的类型是?
? extends T 指T类型或T的子类型
? super T 指T类型或T的父类型
这个两个一般也是和?一样用在定义引用变量中,但是传值范围不一样
T和?运用的地方有点不同,?是定义在引用变量上,T是类上或方法上
SET容器
问题1)set接口中的方法?Set保证元素不重复
set接口继承了Colletion接口,因为set集合存储的本身和Collection存储的功能是一样的,只是多了一个去重的操作。
1,Set的几种是实现方式:一般不使用链表和数组实现set,因为set是不重复元素,所以添加一个元素,链表或数组都要进行遍历查重,效率非常低
2,但是,在并行计算的时候,一般会使用到数组或链表实现的set,并发中会使用到copyonWriteArraySet和concurrentListSet,它能提高io的速度,和并行计算的时候(通常线程不会太多,因为cpu的核心数是有限的)
问题2)HashSet 和TreeSet的问题?
- 顺序问题 TreeSet取出的元素是有序的,无论插入的元素是否有序
HashSet插入的元素顺序是随机的,遍历取出的元素也是无序的。
- hashSet可以为null,TreeSet不可以为null,因为TreeSet要比较查重,不允许值为null
2,treeSet的时间复杂度是logn,HashSet的时间复杂度是O(1
问题3)NavigableSet接口?
Naviableset接口中包含上一个元素和下一个元素接口,也就是只有有序的元素,才会实现这个接口,取出上一个元素,或者下一个元素的值。
Object lower = tree.lower(3);
Object higher = tree.higher(3);
就是navigableset的接口方法
例如:
HashSet<Object> map = new HashSet<>();
map.add(3);
map.add(9);
map.add(2);
map.add(8);
for (Object i : map){
System.out.println(i);
}
TreeSet<Object> tree = new TreeSet<>();
tree.add(3);
tree.add(9);
tree.add(2);
tree.add(8);
System.out.println("==================");
for (Object i : tree){
System.out.println(i);
}
**Object lower = tree.lower(3);**
**Object higher = tree.higher(3);**
System.out.println("取出比3大的元素:"+higher+"=取出比3小的元素"+lower);
共同學(xué)習(xí),寫(xiě)下你的評(píng)論
評(píng)論加載中...
作者其他優(yōu)質(zhì)文章