一.Collection
遍历
①迭代器
使用步骤:
Iterator it = 集合.iterator();
it.hasNext() 判断有没有下一个元素
it.next() 取出当前指针指向的元素
注意事项:
1.一次hasNext配一次next
2.在使用迭代器遍历集合的时候不能采用集合的方法对集合进行增删操作,否则会出现并发修改异常
3.并发修改异常的原因
<1>迭代器内部维护修改次数和集合维护的修改次数不一致导致的异常
<2>如果要用迭代器删除的话, 可以使用迭代器的remove方法来移除, 因为这个里面回退索引, 不会出现漏掉的情况, 同步了modCount以及expectedModCount;
②增强for
格式: 简化迭代器的书写
for( 元素类型 变量名 : 集合|数组 ){
}
注意:底层用的是迭代器, 要注意迭代器的注意事项
③forEach(函数式接口):
我们可以采用lambda表达式, 来遍历集合
二.List
特点:有序,有索引, 可以重复
特有功能:
1. add(int index, E e);
2.E remove(int index); 根据索引删除, 返回被删除的元素, 后面的元素往前顺延
3.E set(int index, E newElement); 根据索引修改, 返回被修改的元素
4.E get(int index);
ArrayList的底层原理:
1.它的底层是维护一个数组, 操作都是操作数组的
2.特点:查询快, 增删慢
3.数组是连续空间, 申请完后, 索引为0旁边一定是索引为1的元素
LinkedList的底层原理:
1.基于链表, 对象记住对象
2.特点:查询慢, 增删快 因为每次查询都要从头或者从尾开始查找, 当数据体量比较大的时候,很慢的, 增删快的元素, 一般动两个节点即可
LinkedList的特有功能:
addFirst(E e)
addLast(E E)
removeFirst
removeLast
getFirst
getLast
三.Set
特点:大部分无序, 无索引, 不能重复
实现类:
1.HashSet
①无序,无索引, 不能重复
②存储的元素如果想要去重, 必须重写equals和hashcode方法
2.LinkedHashSet
①有序, 无索引, 不能重复
②存储的元素如果想要去重, 必须重写equals和hashcode方法
3.TreeSet
①可以排序, 无索引, 不能重复
②存储的元素如果想要排序, 要么元素实现Comparable接口, 要么创建集合的设置比较器
4.使用:set集合没有任何新的功能, 所有的功能都来源于父接口 Collection的方法