Collection
单列集合的顶层接口

常用方法
- public boolean add(E e): 把给定的对象添加到当前集合中 。
- public void clear() :清空集合中所有的元素。
- public boolean remove(E e): 把给定的对象在当前集合中删除。
- public boolean contains(Object obj): 判断当前集合中是否包含给定的对象。
- public boolean isEmpty(): 判断当前集合是否为空。
- public int size(): 返回集合中元素的个数。
- public Object[] toArray(): 把集合中的元素,存储到数组中

迭代器Iterator

boolean hasNext() 判断是否有元素 E next() 获取元素
获取到迭代器
Collection c = new 实现类<>();

Iterator<String> it = c.iterator();
while(it.hasNext()){
	it.next();
}

并发修改异常
当迭代器正在迭代集合时,集合改变了自身的长度 抛出此异常
增强for循环
用来遍历数组和集合的

for(集合中存储元素的数据类型 变量名: 集合名){
		
	}

泛型
定义泛型 定义在类 方法 接口上
预先使用未知的类型

使用泛型  
	创建对象时 传入数据类型 就是在使用泛型
ArrayList<String>
好处 
		将运行时异常 提前到编译时
		避免强制类型转换的麻烦
泛型类的定义 
	public class 类名<泛型变量名>{
	
	}
什么时候确定泛型的数据类型 
创建对象时 确定泛型的类型
类名<数据类型>  变量名 = new 类名<>();
泛型方法 
		修饰符 <T>返回值类型  方法名(参数 ){
		
		}
调用方法 传递参数 确定泛型的数据类型
泛型接口 
	public  interface 接口名<泛型变量>{
	
	}
什么时候确定泛型的数据类型
	1.定义实现类时 直接确定泛型的数据类型
public class 类名  implements 接口名<String>{
		
		}
2.定义实现类时 不确定泛型的数据类型  创建实现类对象时 再确定类型
public class 类名<T>  implements 接口名<T>{
		
		}
		类名<String> 对象名 = new 类名<String>();
泛型的通配符 
	?

泛型的限定 上限限定 ? extends 类 ?可以是 这个类及其子类
下限限定 ? super 类 ? 可以是 这个类及其父类

数据结构

先进后出
存 A B C
取 C B A
队列
先进先出
存 A B C
取 A B C
数组
查询快 增删慢
链表
查询慢 增删快
ArrayList集合
特点
有序 有索引 元素可重复
底层数据结构是数组 查询快 增删慢
线程不安全 效率高

Vector集合
特点
有序 有索引 元素可重复
底层数据结构是数组 查询快 增删慢
线程安全 效率低
LinkedList集合
特点
有序 有索引 元素可重复
底层数据结构是链表 查询慢 增删快
线程不安全 效率高

必须会的
集合遍历 迭代器 增强for 对于List集合还有普通for