1.单列集合
Collection(接口)
List(接口)
特点: 1.可以存储重复元素 2.有索引
ArrayList
LinkedList
Set(接口)
特点: 1.不可以存储重复元素 2.没有索引
HashSet
TreeSet
常用方法:
add(E e); ---->向集合添加一个元素
boolean remove(Object o); ---->删除集合中的元素, 删除第一个----> 底层是拿集合中每一个元素和 o的equals方法去比较
boolean contains(Object o); ----> 判断集合中是否包含某个元素 ----> 底层是拿集合中每一个元素和 o的equals方法去比较
void clear(); ---->清空集合
boolean isEmpty(); ---->判断集合长度是否为0
int size(); --->求集合的长度
2.集合的遍历, 采用迭代器
为什么要学习迭代器???
因为我们普通for循环只能遍历有索引的集合,不能遍历没有索引集合, 所有不是通用的遍历方式,而迭代器是一种通用的遍历方式
使用步骤:
1.获取迭代器
集合对象.iterator();
2.通过迭代器对象的方法来去获取集合中的元素
hasNext(); ---->判断有没有下一个元素
next(); ---->取出下一个元素
ArrayList<String> al = new ArrayList<String>();
al.add("aaa");
al.add("bbb");
al.add("ccc");
al.add("ddd");
Iterator<String> i = al.iterator();
while(i.hasNext()){
String s = i.next();
}
3.List
1.可以存储重复元素
2.有索引
3.有序(存储的顺序和取出的顺序一致)
特有方法:
add(int index,E e); ----> 向指定位置插入一个元素,后面的元素要顺延
remove(int index); --->根据索引删除元素
set(int index,E e); --->将指定索引的元素修改成e
get(int index); ---->获取指定索引处的元素
注意: 凡是跟索引有关的方法, 要注意不要越界
遍历:
1.可以采用迭代器
2.采用普通for循环
2.采用增强for循环(缺点,不能再对集合进行增删操作了)
4.并发修改异常发生的原因:
在迭代器遍历集合的时候采用集合的方法对集合进行增删的操作导致并发修改异常,
采用迭代器的方法进行操作
5.增强for
本质: 底层使用还是迭代器,小心并发修改异常, 在使用增强for的时候不要采用集合方法对集合进行增删操作
格式:
for(集合或者数组元素的数据类型 变量名 : 集合|数组){
}
6.栈和队列
栈:
先进后出
队列:
先进先出
数组:(连续的空间)
查询快,增删慢
查询快:因为有索引
增删慢: 数组长度固定的, 单发增删一个, 都需要创建一个新的数组, 然后将老数组的元素一个个放到新数组中
链表:(散列的空间)
查询慢, 增删块
增删块: 原因,如果要增加, 只需要断开两个节点就可以了
查询慢: 单链表必须从头开始查,双链表, 可以从头或者从尾开始查
7.ArrayList和LinkedList
ArrayList:底层是数组
LinkedList:底层是链表
addFirst(E e); ---->向头添加一个元素 ------> 集合.add(0,元素)
addLast(E e); --->向尾部添加一个元素 ------> 集合.add(元素)
getFirst(); ----> 集合.get(0);
getLast(); ----> 集合.get(集合.size()-1);
removeFirst(); ---->集合.remove(0);
removeLast(); ----> 集合.remove(集合.size()-1);