List集合
1.ArrayList 3.Vector 2.LinkedList
- ArrayList----->底层就是一个数组
所属的包 java.util
如何创建对象
无参数构造方法 带默认空间的构造方法 带collection参数的构造方法
常用的方法—小容器
存 add
取 get
删 remove
改 set
个数 size
add(E e) add(int index,E e)
addAll(Collection c); add(int index,Collection c)
clear();将集合内的全部元素清除
boolean = contains(Object);找寻某一个给定的元素是否在集合中拥有
ensureCapacity(int minCapacity);
E = get(int index);
int = indexOf(Object obj); lastIndexOf();
boolean = isEmpty();
Iterator = list.iterator();//迭代器
remove(int index) remove(Object obj)
removeAll()差集
retainAll();交集
E = set(int index,E value)
int size();
List = subList(int begin,int end);
toArray(); 集合变成数组
toArray(T[] );
trimToSize();// 变成有效元素个数那么长
关于泛型的问题:
由于arrayList底层是一个Object[] 什么类型都可以存进去
取出来的时候多态的效果 需要自己造型 显得用起来非常的麻烦
JDK1.5之后—>泛型
用来规定数据类型的,定义的时候用一个符号代替某种类型
在使用的时候用具体的数据类型 将定义的那个符号替换掉
泛型可以用在哪里?
- 泛型类
类定义的时候描述某种数据类型 集合的使用就是这样 - 泛型接口
与泛型类的使用基本一致 子类实现接口时必须添加泛型 - 泛型方法
方法调用时传参数 方法的泛型与类无关 带有泛型的方法可以不放在带有泛型的类中 - 高级泛型 规范边界 extends super
Vector类
- java.util包
- 是ArrayList集合的早期版本 (StringBuffer早期 StringBuilder后来)
Vector底层也是利用(动态)数组的形式存储
Vector是线程同步的(synchronized) 安全性高 效率低 - 扩容方式与ArrayList不同
默认是扩容2倍 可以通过构造方法创建对象时修改这一机制 - 构造方法
- 常用方法
Stack类 栈
- java.util包
- 构造方法只有一个无参数
- 除了继承自Vacton类的方法外还有特殊的方法
push(E e)将某一个元素压入栈顶(add())
E = pop()将某一个元素从栈顶取出并删掉(E = remove())
E = peek()查看栈顶的一个元素 不删除(get())
boolean = empty()判断栈内元素是否为空(isEmpty())
int = search()查找给定的元素在占中的位置(indexOf()) - 中国象棋 悔棋
栈中存储每一次操作的步骤
撤销功能
Queue接口
- java.util 通常子类LinkedList ArrayDeque
- 通常无参数构造方法创建
- 一般方法
add()
element()---->get()
remove()
boolean = offer(E e);//相当于add 不会抛出异常
E = peek();//相当于 element方法
E = poll();剪短// 相当于remove() - 双十一零点秒杀
所有进入秒杀系统的人存入队列
ArrayList、LinkedList类
- java.util包 自己封装过LinkedBox 内部类Node对象(节点 prev item next)
- 底层使用双向链表的数据结构形式来存储
适合于插入或删除 不适合遍历轮询 - 构建对象
无参数构造方法 带参数的构造方法(collection) - 常用的方法
增删改查 add() remove() set() get() size() offer poll peek
手册中提供的其他常用方法
addAll addFist addLast() clear() contains()
element() getFirst() getLast() indexOf() lastIndex()
… - 插入删除的特性是否像想的那样
对比ArrayList Linked
三连博主,每天分享一个编程小技巧!