泛型
泛型就是把数据类型作为参数传递
如在Comparable/Comparator接口中通过泛型指定比较元素的数据类型; 在集合中通过泛型指定存储元素的数据类型
泛型好处: 在编译阶段就进行数据类型检查
注意,集合中的泛型在定义时指定:
Collection<String> collection = new ArrayList<>();
Collection collection = new ArrayList(); 这种在定义变量时没有指定,在赋值时指定泛型,没有作用
Collections工具类
定义了一组synchronizedXXX(XXX)方法, 可以把XXX集合转换为线程安全的集合,
synchronizedCollection(Collection c)
synchronizedList(List list)
synchronizedMap(Map<K,V> m)
synchronizedSet(Set s)
在开发多线程程序中,一般不使用, 直接使用java.util.concurrent包中线程安全的类:
CopyOnWriterArrayList, CopyOnWriteArraySet, ConcurrentSkipListSet
ConcurrentHashMap, ConcurrentSkipListMap
Lambda
在数学领域, Lambda就是一个函数
在java中, 可以把Lambda看作是一个匿名方法
Lambda表达式可以看作是函数式接口中抽象方法的实现, 它省略了方法的修饰符, 返回值类型,参数类型, 甚至省略return语句
语法:
(参数列表) -> {语句;}
说明:
如果参数列表中只有一个参数, 小括弧可以省略
如果有多个参数, 小括弧不能省略
参数列表可以省略参数类型, 如果想要指定参数类型则必须为所有参数都指定类型
如果lambda体只有一条语句, 大括弧可以省略
如果有多条语句, 大括弧不能省略
如:
没有参数, 返回一个值, return可以省略
() -> 666
有一个参数
x -> x + 10
有多个参数
( x,y ) -> x+y
指定参数类型
(int x, int y ) -> x+y
有多条语句, 需要使用大括弧
(int x , int y ) -> {System.out.println( x + y ); return x+y; }