javase 集合、Strean流、函数式接口
一、集合
(一)Collection集合

Collection集合的特点

1、List
ArrayList数组、LinkedList链表
2、Set
HashSet
JDK8前:数组+链表
JDK8后:数组+链表+红黑树
LinkedHashSet
HashSet中的每个元素都加上前后指针,变成双向链表
TreeSet
自定义排序规则


Double.compare(a, b)默认是升序,即a-b>0则a在排在后面。
如果修改成Double.compare(b, a)就变成降序了。
Collection集合的常用方法

(二)Map集合
键值对

Map集合体系的特点

Map常用方法

Map集合的遍历方式

1、键

2、键值对

3、lambda表达式

其实在forEach的底层源码中,就是使用的方法二键值对来进行遍历的,每次遍历完再调用accpet方法,对遍历的元素进行相应的操作。
二、Stream流

(一)获取Stream流
Collection系列、数组获取Stream流

Map系列获取Stream流

(二)Stream流常用方法
中间方法

如果希望自定义对象能够去重复,重写对象的hashCode和equals方法,才可以去重!
终结方法

注:max和min方法返回的类型是Optional对象,需要使用它的get方法来获取其中的内容。

收集Stream流

补充:函数式接口、lambda表达式、方法引用
1、函数式接口
有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。
1 | public interface Function<T, R>{ |
2、lambda表达式
举例:
1 | public static void main(String[] args){ |
3、方法引用
1 | Map<String, Double> map = list.stream().collect(Collectors.toMap(Teacher::getName, Teacher::getSalary); |
方法引用会自动根据toMap所需的参数(Function函数式接口的实现类对象)中唯一的那个抽象方法所需的参数个数(1个),去Teacher中的方法getName中匹配两个参数的getName方法作为这个抽象方法的@Override。
lambda表达式和方法引用都是去匹配函数式接口的实现类对象中那个抽象方法的@Override。
