Skip to main content

内部类

David LiuLess than 1 minute

内部类

必要性:

每一个内部类都可以继承一个类,或者实现若干个接口,从而达到多继承的目的

匿名内部类

无自己的构造方法,但是可以有初始化块

常用于:

  1. 一个 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});
    }};
    
  2. 拓展 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/4eb6afb74c82open in new window

https://www.jb51.net/article/233479.htmopen in new window

http://www.bjpowernode.com/javazixun/4712.htmlopen in new window