10.13-队列、Collections工具类与内部类

ArrayListVector差异

  • ArrayList是在Java1.2版本以后采用变长数组算法实现的,线程不安全,但效率高速度快

  • Vector在Java1.0版本出现,底层也是采用变长数组算法实现的,线程安全但效率低

ArrayListLinkedList差异

  • ArrayList是采用变长数组算法来实现的,更适合查询数据

  • LinkedList是采用双向链表结构来实现的,更适合频繁的增删操作

新循环(增强for循环[for each])

JDK1.5版本后的新特性。

语法

for(元素类型 e:集合/数组){
    //循环体
}

新循环有别于传统循环,其出现的目的是用于简化遍历集合/数组的。

例子

队列(Queue)

队列也是用于保存一组数据的,但与数组和集合不一样的是,队列存取元素必须遵循先进先出的原则(FIFO)

LinkedList具有存取效率高的特点,所以Java使用该类作为队列的实现类来使用

队列的遍历是一次性的,想要获取队列中的某个元素,就必须先将改队列中该元素之前的所有元素取出后才可以访问与使用

队列中的方法

boolean offer(E e) 向队列末尾增加新元素(入队操作)

E pool() 获取并删除队首元素(出队操作)

E peek() 仅获取队首元素,但不将其从队列中删除

双端队列(Deque)

双端队列指的是队列两端都可以出队/入队

当我们使用双端队列来存取元素且只从一侧操作时,就形成了一种存取模式:先进后出;这是一种经典的数据结构:栈结构。

使用栈结构通常是为了操作具有可追溯性,例如常见的后退功能。

Collections工具类

Collections是集合的工具类

sort()方法

静态方法sort()用于针对List集合的元素排序

默认比较规则

Comparable接口:该接口的实现类具备可比较性

实现该接口必须重写其中的compareTo()方法,该方法用于定义具体的比较规则

返回值

返回的证书并不关心具体值的大小,关心的是取值范围

  • 当返回值>0 当前对象比给定对象大

  • 当返回值<0 当前对象比给定对象小

  • 当返回值=0 当前对象与给定对象相等

例子

比较队列中点到原点的距离,并根据距离排序队列

首先,创建Point类

其次,创建SortDemo测试类

临时比较规则

待补充

内部类

将一个类声明在类体当中,这样的类叫内部类

分类

  1. 根据位置的不同,Java的内部类分为四种

    1. 静态内部类

      • 使用static来修饰,声明在类体中

      • 静态内部类可以访问外部类的静态成员

    2. 成员内部类

      • 声明在类体中,不使用static修饰,具有类的成员特征,也就是必须有外部类的实例才能创建成员内部类的实例

      • 成员内部类可以访问共享外部类的成员变量

    3. 局部内部类

      • 把类声明在方法中(很少见)

    4. 匿名内部类

      • 匿名内部类非常常见,可以写在任何地方,就是一般语句

      • 语法更像创建对象 new Comparator<String>(){}

      • 匿名类是对原类的一个继承,同时还创建了原类的子类实例,{}就是继承以后的类体,类体中可以使用所有类的语法

      • 匿名内部类中不能书写构造器

      • 匿名类可以从抽象类或接口中继承、实现,必须提供抽象方法的实例

例子-静态内部类

例子-成员内部类

例子-局部内部类

例子-匿名内部类

例子-匿名内部类继承

匿名内部类可以继承抽象类或者实现接口

  1. 任何的内部类都会被编译成独立的.class文件

  2. 内部类最大的作用是"封装"

最后更新于