集合是指具有某种特定性质的具体或抽象的对象汇总而成的集体。
数组:具有某个相同的特征的数据放在一起。

变量—存储容器。但是只能存储一个元素。
数组—存储一组相同类型的元素。可以存储很多,但是缺点是增删很慢。相当的麻烦。因为:长度是固定的。
自己定义的Box(ArrayBox,LinkedBox)—用于存储一组元素。用户用起来长度是可变的。ArrayBox是遍历方便,增删也不方便,但是用户使用增删方便。LinkedBox,适合增删,不适合遍历。

集合:可以理解为我们封装的Box。比我们自写的更加的优秀,具有更多的方法。

集合是一个非常庞大的体系。集合有很多分类。

未命名文件.png
在他们下面的都是具体的实现类。

List是无序可重复,Set是无序不重复
Map的都是key无序无重复,value无序可重复。

List

ArrayList和Vector底层都是数组。但是Vecotor是早期版本的。一般这样的都是表示线程安全的。
都在java.util.xx包下

ArrayList

构造方法:

  1. 无参数,默认容量为0
  2. int 类型的参数。表示默认容量的初始值。
  3. Collection<? extends E> c 类型的参数。表示List和Set的都行。

常用的方法:

  • add
  • get
  • remove
  • size
  • length

由于arrayList底层是一个Object[] 什么类型都可以存进去
取出来的时候多态的效果,需要自己造型,显得用起来非常的麻烦。
泛型:用来规定数据类型。相当于就是类型的变量的名称,而不是值的变量的名称。
在使用的时候用具体的数据类型,将定义的那个泛型符号替换掉。
泛型可以用在哪里?

  1. 用在类上。表示外界要传入一个类型。跟传入一个变量很像。
  2. 泛型接口,与泛型类的使用基本一致,也是表示传入一个类型变量。子类实现的时候,必须添加泛型。
  3. 泛型方法。方法调用的时候,传入一个类型。在方法描述的时候,加上。方法的泛型和类无关。一个带有泛型的方法,可以不放在带有泛型的类中。
  4. 高级泛型,extends,super。extends表示规定传入类型的范围。super父类。
  5. 以下的方法顾名思义
  • clear
  • contains
  • ensureCapacity(int minCapcity)
  • get
  • indexOf
  • lastIndexOf
  • isEmpty
  • Iterator = iterator();迭代器。1.5之后,增强for循环。通常用于遍历没有顺序的。
  • remove(int) remove(Object)
  • removeAll 移除两个集合的差集
  • retainAll 返回两个集合之间的交集
  • addAll 两个集合的并集。
  • set
  • subList

    Vector

  1. java.util包下
  2. 是ArrayList集合的早期版本。类似StringBuffer和StringBuilder。通常体现在线程安全上。Vector底层也是利用数据的形式存储的。也是动态的数据形式。
  3. Vector是线程同步的,但是效率比较低。synchronized
  4. Vector的扩容方式是每次扩容2倍。我们可以通过构造方法创建对象时修改这一机制。
  5. 构造方法—跟ArrayList一样
  6. 常用方法—更ArrayList一样。

    Stack类 栈

  7. 底层继承Vector。

  8. java.util 包下
  9. 构造方法只有一个无参数构造方法
  10. 常用方法就是
    1. push。将某一个元素压入栈顶
    2. pop。将栈顶的元素弹出来。并删掉栈顶元素。
    3. peek。查看栈顶的一个元素。不删除。返回栈顶的元素。
    4. empty。判断栈内元素是否为空。返回为boolean
    5. search。查找给定的元素在栈中的位置。有点像indexOf。返回值是索引号。
    6. 继承Vector,所以Vecotor的常用方法都能用。
  11. 用的地方:比如用于记录一些信息。一般用于存储一些列信息,这样就可以得到之前操作的记录。

    Queue 队列

    是一个接口。有很多的实现类。

  12. java.util.xxx

  13. 通常子类使用LinkedList。 ArrayDeque
  14. 通常无参数构造方法创建子类。
  15. 规则:
    1. add
    2. element 相当于是get
    3. remove
    4. 下面方法是独有的。下面方法在出错的时候,不会抛出异常。
    5. boolen = off(E e) 相当于是add。可以处理相关的异常。
    6. poll(); 剪短,相当于是remove。
    7. peek();相当于是element方法。

底层的数据结构用数组或者链表都可以实现。队列和数组的功能。

LinkedList

  1. 是List的子类,也是Queue的子类
  2. java.util包下
  3. 我们自己封装过。LinkedBox。用的是双向链表的结构。Node的对象(节点)。是一个对象。里面存有前一个对象地址,当前的值,后一个对象的值。可以把Node写成一个内部类,因为只能这个LinkedBox内部用。更适合于插入和删除。不适合与遍历,地址不连续。时间复杂度为O(n)。
  4. 通过无参数构造方法。也可以带参数的。
  5. add,remove,set,get,size等方法。也有Queue接口的方法。
  6. addAll addFirst add(0,value); addFirst往第一个位置插入。addLast往尾结点插入一个。
  7. contains 是否包含
  8. peek
  9. get getFirst,getLast 顾名思义
  10. indexOf,lastIndexOf
  11. offer,offerFirst,offerLast
  12. pop,push,remove,removeFirst
  13. toArray
  14. 没有trimToArray,因为底层是链表。

插入和删除的特性是否像想的那样。