包装类 数学相关 日期相关
字符串相关 集合相关 异常相关
IO相关 线程相关 网络相关 反射注解 *GUI
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
变量---容器
存储一个元素
数组---容器
一组具有某种特性的数据存放在一起
存储一组元素(数据类型一致) 长度固定
集合---容器 与数组类似 集合的长度存储之后还能改变
集合是用来存储一组元素
可以理解为集合是我们封装的Box 只不过比我们写的更加的优秀 更多的方法
================================================================================================
集合java.util
Collection Map
存储的都是value 存储的是以key-value形式存在
List Set
有序可重复 无序无重复 key无需无重复 value无需可重复
序 : 顺序 添加进去的元素 取得元素的顺序一致 注意指的不是集合自己的顺序
重复:两个对象元素一致
ArrayList Vector区别--->StringBuilder StringBuffer
List集合
1.ArrayList 3.Vector 2.LinkedList
1.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之后--->泛型
用来规定数据类型的,定义的时候用一个符号代替某种类型
在使用的时候用具体的数据类型 将定义的那个符号替换掉
泛型可以用在哪里?
1.泛型类
类定义的时候描述某种数据类型 集合的使用就是这样
2.泛型接口
与泛型类的使用基本一致 子类实现接口时必须添加泛型
3.泛型方法
方法调用时传参数 方法的泛型与类无关 带有泛型的方法可以不放在带有泛型的类中
4.高级泛型 规范边界 extends super
=============================================================================================
总结
集合有很多类 非常庞大的一个系统
1.了解集合的每一个具体的分支 各自特点
2.常用的集合的方法
3.每一个集合的特点
4.集合底层的原理
5.最好能手动自己封装
================================================================================================
List
Vector类
1.java.util包
2.是ArrayList集合的早期版本 (StringBuffer早期 StringBuilder后来)
Vector底层也是利用(动态)数组的形式存储
Vector是线程同步的(synchronized) 安全性高 效率低
3.扩容方式与ArrayList不同
默认是扩容2倍 可以通过构造方法创建对象时修改这一机制
4.构造方法
5.常用方法
Stack类 栈
1.java.util包
2.构造方法只有一个无参数
3.除了继承自Vacton类的方法外还有特殊的方法
push(E e)将某一个元素压入栈顶(add())
E = pop()将某一个元素从栈顶取出并删掉(E = remove())
E = peek()查看栈顶的一个元素 不删除(get())
boolean = empty()判断栈内元素是否为空(isEmpty())
int = search()查找给定的元素在占中的位置(indexOf())
4.中国象棋 悔棋
栈中存储每一次操作的步骤
撤销功能
Queue接口
1.java.util 通常子类LinkedList ArrayDeque
2.通常无参数构造方法创建
3.一般方法
add()
element()---->get()
remove()
boolean = offer(E e);//相当于add 不会抛出异常
E = peek();//相当于 element方法
E = poll();剪短// 相当于remove()
4.双十一零点秒杀
所有进入秒杀系统的人存入队列
ArrayList
LinkedList类
1.java.util包 自己封装过LinkedBox 内部类Node
2.底层使用双向链表的数据结构形式来存储
适合于插入或删除 不适合遍历轮询
3.构建对象
无参数构造方法 带参数的构造方法(collection)
4.常用的方法
增删改查 add() remove() set() get() size() offer poll peek
手册中提供的其他常用方法
addAll addFist addLast() clear() contains()
element() getFirst() getLast() indexOf() lastIndex()
.....
5.插入删除的特性是否像想的那样
对比ArrayList Linked