1.Lambda表达式就是一个匿名内部类。就是一个匿名内部类或者说是函数式接口中方法的具体实现
(o1,o2)->{ } 只有一个参数,()可以省略。方法实现只有一句,{ }可以省略
2.Comparator接口中compare(o1,o2)方法
如果:o1 > o2 return 正数
换句话说,如果o1在o2的后面,return正数
java默认大的放在后面(升序)
3.Collection接口的子接口:List,Set,Queue(Deque)
Queue是Deque,LinkedList,PriorityQueue的父接口
Queue:单端队列。实现类:LinkedList 方法:offer(e),poll(),peek() LinkedList可以用作单端队列
Deque:双端队列。实现类:LinkedList ArrayDeque 方法:入队:offerLast(),offerFirst() 出队:pollFirst,pollLast 访问:peekFirst(),peekLast()
ArrayDeque:用作堆栈时快于 Stack
,在用作队列时快于 LinkedList
。
(1)ArrayDeque可以用作栈Stack。Deque<Integer> stack = new ArrayDeque<Integer>();
(2)ArrayDeque可以用作单端队列,双端队列
PriorityQueue实现了Queue接口
4.Stack实现了List接口,继承自Vector
5.
关于ArrayList和Vector区别如下:
- ArrayList在内存不够时默认是扩展1.5倍 + 1个,Vector是默认扩展2倍。
- Vector提供indexOf(obj, start)接口,ArrayList没有。
- Vector属于线程安全级别的,但是大多数情况下不使用Vector,因为线程安全需要更大的系统开销。
6.
Collections.sort()和Arrays.sort()的区别:
Arrays.sort()排数组(基本类型,引用类型)
Collections.sort()只能排List
两个都可以传入比较器定制排序
7.NullPointerException
声明变量却未赋值,然后我们使用这个变量就会发生NullPointerException
8.transient和static修饰的属性不会被序列化
9.super关键字
子类默认通过super()调用父类无参构造方法,如果父类没有无参构造方法,那么实例化子类时就会报错
解决措施:(1)在父类中定义一个什么都不做的无参构造方法(2)在子类中显示的调用父类的有参构造方法
10.synchronized关键字是用monitorenter和monitorexit两个指令锁住同步块的
11.对象由三部分组成:对象头,实例数据,对齐填充字节
12.定义内部类的好处是:外部类可以访问内部类的所有属性和方法,包括私有属性和私有方法
13.ClassCastException
向List添加了不同类型的元素,取出的时候可能会发生转型错误