华杉研发九学习日记20
一,LinkedHashMap
与HashMap相比,key是有序的
Map<Integer,String> map = new LinkedHashMap<Integer,String>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
map.put(4, "four");
System.out.println(map);
二,TreeMap实现类
TreeMap是key有序的键值对容器,即它会对key进行排序,和TreeSet类似,它底层也用到了树形结构。
排序方式:
- 自然排序 Comparable
- 比较器排序 Comparator
// 有自然排序
// Map<Integer, String> map = new TreeMap<Integer, String>();
// 比较器排序
// Map<Integer, String> map = new TreeMap<>(new Comparator<Integer>() {
// @Override
// public int compare(Integer o1, Integer o2) {
// return o2-o1;
// }
// });
// 比较器排序的lambda表达式
Map<Integer, String> map = new TreeMap<>((o1,o2)->o2-o1);
map.put(1111,"李素");
map.put(2,"wang");
map.put(322,"张三");
map.put(42,"天气");
System.out.println(map);
三,Arrays类
针对于数组的工具包
String str[]={"李四","王五","张三"};
List<String> list = Arrays.asList(str);
System.out.println(list);
Integer sc[]={12,45,10,23,100,-10};
System.out.println(Arrays.toString(sc));
// 升序 --快速排序功能
Arrays.sort(sc);
System.out.println(Arrays.toString(sc));
// 二分查找
System.out.println(Arrays.binarySearch(sc,12));
// 降序 -- 自定义排序实现
Arrays.sort(sc,(a,b)->b-a);
System.out.println(Arrays.toString(sc));
四,函数式接口
JDK8新特性
4.1 lambda(箭头函数)
lambda在JDK 1.7之前是没有的,因为lambda表达式的方式和java中的语法有很大的不同。Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用Lambda表达式可以使代码变的更加简洁紧凑。
lambda表达式只能用于简化函数式接口对应的匿名内部类
lambda表达式由3部分组成: lambda形参列表,箭头以及lambda方法体.
条件:
接口必须是函数式接口(该接口中的抽象方法只能有且仅有一个)
注意:
1.如果方法体只有一行,则可以省略花括号
2.如果方法中有参数列表,则参数中的数据类型可以省略不写3.如果方法中的参数有且仅有一个参数,则可以省略小括号
4.如果方法中有返回值,且返回值有且仅有一条语句,则可以把大括号和return一起省略
4.2 java内置的函数式接口
// 消费型接口
Consumer<String> con = s -> System.out.println(s);
con.accept("你好你好");
// 生产型接口
Supplier<Integer> s1 = ()->new Random().nextInt(100)+1;
System.out.println(s1.get());
// 函数型接口
Function<String, Integer> f1 = s->s.length() ;
Integer len = f1.apply("abc");
System.out.println(len);
// 断言型接口
Predicate<Integer> pre = (a)->{
if(a%2==0)
return true;
else return false;
};
System.out.println(pre.test(11));
// 了解中的了解
System.out.println(pre.test(11));
UnaryOperator<Integer> uo = (a)->a*10;
System.out.println(uo.apply(3));
BiFunction<Integer, Integer, Integer> bi = (a,b)->a+b;
System.out.println(bi.apply(3,4));
五,方法引用
方法引用是特定情况下lambda表达式的简化写法.当外界已经有与函数式接口里抽象方法匹配的方法的时候,可以使用方法引用.
方法引用本质上是lambda表达式.
lambda的本质是函数式接口的匿名实现类对象!方法引用的!
本质也是函数式接口的匿名实现类对象!
// 打印语句
Consumer<String> con1 = new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
};
con1.accept("Hello");
// lambda表达式
Consumer<String> con2 = (s)-> System.out.println(s);
con2.accept("World");
// 方法的引用
Consumer<String> con3 = System.out::println;
con3.accept("小孤鸡");