内部类
January 12, 2023Less than 1 minute
内部类
必要性:
每一个内部类都可以继承一个类,或者实现若干个接口,从而达到多继承的目的
匿名内部类
无自己的构造方法,但是可以有初始化块
常用于:
一个 final 的 HashMap 初始化,可以直接一条语句写完很方便。
Map<State, State[]> table = new HashMap<State, State[]>() {{ put(State.START, new State[]{State.START, State.SIGNED, State.IN_NUMBER, State.END}); put(State.SIGNED, new State[]{State.END, State.END, State.IN_NUMBER, State.END}); put(State.IN_NUMBER, new State[]{State.END, State.END, State.IN_NUMBER, State.END}); put(State.END, new State[]{State.END, State.END, State.END, State.END}); }};
拓展 PriorityQueue 功能,让他可以直接引用别人的数组且有自己的比较器,来不占用别人的空间,实现原地堆排序(Onlogn, O1),普通的 int[]还是直接 Arrays.sort 即可,这个没法实现,哎,因为是 private
常用于一个二维 int 按某一位比较,如:xx,实现不了,看来堆排序只能手撕了,不需要堆排的时候老老实实 Arrays.sort 吧
int[][] values; // values = xxx; PriorityQueue<int[][]> pq = new PriorityQueue<int[][]>((a, b) -> a[1] - b[1]) {{ queue = values; size = values.size; heapify(); }};
文章:
https://www.jianshu.com/p/4eb6afb74c82