集合是指具有某种特定性质的具体或抽象的对象汇总而成的集体。
数组:具有某个相同的特征的数据放在一起。
变量—存储容器。但是只能存储一个元素。
数组—存储一组相同类型的元素。可以存储很多,但是缺点是增删很慢。相当的麻烦。因为:长度是固定的。
自己定义的Box(ArrayBox,LinkedBox)—用于存储一组元素。用户用起来长度是可变的。ArrayBox是遍历方便,增删也不方便,但是用户使用增删方便。LinkedBox,适合增删,不适合遍历。
集合:可以理解为我们封装的Box。比我们自写的更加的优秀,具有更多的方法。
集合是一个非常庞大的体系。集合有很多分类。

在他们下面的都是具体的实现类。
List是无序可重复,Set是无序不重复
Map的都是key无序无重复,value无序可重复。
List
ArrayList和Vector底层都是数组。但是Vecotor是早期版本的。一般这样的都是表示线程安全的。
都在java.util.xx包下
ArrayList
构造方法:
- 无参数,默认容量为0
- int 类型的参数。表示默认容量的初始值。
- Collection<? extends E> c 类型的参数。表示List和Set的都行。
常用的方法:
- add
- get
- remove
- size
- length
由于arrayList底层是一个Object[] 什么类型都可以存进去
取出来的时候多态的效果,需要自己造型,显得用起来非常的麻烦。
泛型:用来规定数据类型。相当于就是类型的变量的名称,而不是值的变量的名称。
在使用的时候用具体的数据类型,将定义的那个泛型符号替换掉。
泛型可以用在哪里?
- 用在类上。表示外界要传入一个类型。跟传入一个变量很像。
- 泛型接口,与泛型类的使用基本一致,也是表示传入一个类型变量。子类实现的时候,必须添加泛型。
- 泛型方法。方法调用的时候,传入一个类型。在方法描述的时候,加上。方法的泛型和类无关。一个带有泛型的方法,可以不放在带有泛型的类中。
- 高级泛型,extends,super。extends表示规定传入类型的范围。super父类。
- 以下的方法顾名思义
- clear
- contains
- ensureCapacity(int minCapcity)
- get
- indexOf
- lastIndexOf
- isEmpty
- Iterator = iterator();迭代器。1.5之后,增强for循环。通常用于遍历没有顺序的。
- remove(int) remove(Object)
- removeAll 移除两个集合的差集
- retainAll 返回两个集合之间的交集
- addAll 两个集合的并集。
- set
- subList
Vector
- java.util包下
- 是ArrayList集合的早期版本。类似StringBuffer和StringBuilder。通常体现在线程安全上。Vector底层也是利用数据的形式存储的。也是动态的数据形式。
- Vector是线程同步的,但是效率比较低。synchronized
- Vector的扩容方式是每次扩容2倍。我们可以通过构造方法创建对象时修改这一机制。
- 构造方法—跟ArrayList一样
-
Stack类 栈
底层继承Vector。
- java.util 包下
- 构造方法只有一个无参数构造方法
- 常用方法就是
- push。将某一个元素压入栈顶
- pop。将栈顶的元素弹出来。并删掉栈顶元素。
- peek。查看栈顶的一个元素。不删除。返回栈顶的元素。
- empty。判断栈内元素是否为空。返回为boolean
- search。查找给定的元素在栈中的位置。有点像indexOf。返回值是索引号。
- 继承Vector,所以Vecotor的常用方法都能用。
用的地方:比如用于记录一些信息。一般用于存储一些列信息,这样就可以得到之前操作的记录。
Queue 队列
是一个接口。有很多的实现类。
java.util.xxx
- 通常子类使用LinkedList。 ArrayDeque
- 通常无参数构造方法创建子类。
- 规则:
- add
- element 相当于是get
- remove
- 下面方法是独有的。下面方法在出错的时候,不会抛出异常。
- boolen = off(E e) 相当于是add。可以处理相关的异常。
- poll(); 剪短,相当于是remove。
- peek();相当于是element方法。
LinkedList
- 是List的子类,也是Queue的子类
- java.util包下
- 我们自己封装过。LinkedBox。用的是双向链表的结构。Node的对象(节点)。是一个对象。里面存有前一个对象地址,当前的值,后一个对象的值。可以把Node写成一个内部类,因为只能这个LinkedBox内部用。更适合于插入和删除。不适合与遍历,地址不连续。时间复杂度为O(n)。
- 通过无参数构造方法。也可以带参数的。
- add,remove,set,get,size等方法。也有Queue接口的方法。
- addAll addFirst add(0,value); addFirst往第一个位置插入。addLast往尾结点插入一个。
- contains 是否包含
- peek
- get getFirst,getLast 顾名思义
- indexOf,lastIndexOf
- offer,offerFirst,offerLast
- pop,push,remove,removeFirst
- toArray
- 没有trimToArray,因为底层是链表。
插入和删除的特性是否像想的那样。
