Lambda表达式
匿名表达式Lambda实现了函数式编程思想,面向对象思想强调“必须通过对象的形式来做事情” 函数式思想则尽量忽略面向对象的复杂语法:“强调做什么,而不是以什么形式去做”。
有参以及有返回值的Lambda内部类使用方式
public class LambdaInterClassTest {
public static void main(String[] args) {
useCalculator((int a ,int b)->{
return a+b;
});
// 甚至还能进行极致的省略
useCalculator((a,b)-> a+b)); //这里如果方法需要的参数只是一个值的话甚至小括号都能省略,就放一个a
useCalculator(new Calculator() {
@Override
public int calc(int a, int b) {
return a-b;
}
});
}
public static void useCalculator(Calculator calculator){
int result = calculator.calc(10,20);
System.out.println(result);
}
}
interface Calculator{
int calc(int a ,int b);
}
Lambda表达式的省略模式
省略规则:
参数类型可以省略,但是有多个参数的情况下,不能只省略一个。
如果参数有且仅有一个,那么小括号可以省略。
如果代码块的语句只有一条,可以省略大括号和分号,甚至是return,只有省略了大括号才能同时省略return
Lambda表达式和匿名内部类的区别
实现原理也不同
匿名内部类,编译后产生一个单独的.class字节码文件
Lambda表达式,编译之后没有一个单独的。class字节码文件。对应的字节码会在进行的时候动态生成。
集合
集合体系结构
集合和数组的对比小结
int arr1[] = {1, 2, 3};
String arr2[] = {"a", "b", "c"};
System.out.println(Arrays.toString(arr1));
System.out.println(Arrays.toString(arr2));
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
System.out.println(arrayList);
ArrayList<Integer> arraylist1 = new ArrayList<>(); //这里<>里面就不能放int
arraylist1.add(1);
arraylist1.add(2);
arraylist1.add(3);
System.out.println(arraylist1);
Collection集合
它是单例集合的顶层接口,他表示一组对象,这些对象也成为Collection的元素。
JDK不提供此接口的任何实现,他提供更具体的子接口如(Set和List)实现。
床架Collection集合的对象有两种方式,多态的方式,具体的实现类ArrayList。
COllection集合的常见的方法
Collection<String> collection = new ArrayList<>();
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
boolean flag = collection.remove("aaa"); //返回的是失败或者成功的boolean数值
System.out.println(collection);
collection.removeIf((String s)->{return s.length()==3;});//删除条件判断对的值
System.out.println(collection);
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
collection.clear();
System.out.println(collection);
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
boolean flag1 = collection.contains("aaa");
System.out.println(flag1);
boolean flag2 = collection.isEmpty(); //判断集合是否为空
System.out.println(flag2);
int size = collection.size();
System.out.println(size);
集合的遍历:迭代器
Collection <String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.add("f");
Iterator<String> it = list.iterator();
// System.out.println(it.hasNext());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
while(it.hasNext()){
System.out.println(it.next());
}
集合的遍历:增强for
只有Collection极其子类才有,双列map没有
ArrayList<String> arrayList = new ArrayList<>();
arrayList.add("a");
arrayList.add("b");
arrayList.add("c");
arrayList.add("d");
arrayList.add("e");
arrayList.add("f");
for(String str : arrayList){
System.out.println(str);
}
在增强for中修改的值不会影响到原集合
三种循环的使用场景