1、集合的体系结构:Collection、List、ArrayList
(1)原因:不同的数据结构(数据的组织,存储方式),Java提供了不同的集合,但是不同的集合功能是相似的,不断的向上提取,并将共性提取出来;
(2)学习方法:从最顶层开始学习,最顶层包含了所有的共性;
(3)使用方法:使用最底层,最底层是具体的实现
2、集合的遍历方式:
(1)toArray():可以把集合转换成数组,然后遍历数组;
(2)iterator():返回一个迭代器对象,通过迭代器对象来迭代集合(遍历集合)
a、E next():返回下一个元素;
b、boolean hasNext():判断是否有元素可以获取,如果没有元素可以获取,则会出现NoSuchElementException异常
注意:迭代器是依赖于集合的,相当于集合的一个副本,当迭代器在操作的时候,如果发现和集合不一样,则会出现并发修改异常
解决方案:
a、不使用迭代器;
b、在迭代器进行遍历的时候使用迭代器来进行修改
3、泛型:Java为了解决类型转换异常而提供的一种机制(使用集合存储自定义对象并遍历),把明确数据类型的工作提前到了编译时期
(1)优点:
a、避免了类型转换的问题;
b、减少黄色警告线;
c、简化代码的书写
(2)使用场景:看到<E>
4、foreach:增强for循环,一般用于遍历集合或者数组
格式:
for(元素的类型变量:集合或者数组对象){
可以直接使用变量;
}
注意:在增强for循环中不能修改集合,否则会出现并发修改异常
public interface Interable<I>:实现这个接口允许对象成为"foreach"语句的目标
5、数组的特点:
(1)数组的长度一旦定义则不可改变;
(2)数组中的元素都有整数索引;
(3)数组只能存储同一类型的元素;
(4)数组既可以存储基本数据类型,也可以存储 引用数据类型;
(5)数组查找快,增删慢
获取元素:通过索引获取
在指定元素后添加元素:先创建一个新的数组,长度是原先数组长度+1,遍历原先数组,并插入到新的数组中,当碰到该指定元素时则在其后添加新元素,其余的放在新元素后面
6、链表:由链子连接起来的一堆结点
结点:地址值,值,下一个结点地址值
获取元素:遍历链表
在指定结点后添加新结点:把指定结点的下一个地址值修改为新结点的地址值,把新结点的下一个地址值改为原链表的下一个地址值
特点:查询慢,增删快
7、List的常用子类:
(1)ArrayList():数据结构是数组,查询快,增删慢;查询多,增删少或者不知道使用什么的时候使用
(2)LinkedList():数据结构是链表,查询慢,增删快;查询少,增删多的时候使用
LinkedList的特有功能:
a、void addFirst(E e):将元素添加到索引为0的位置
b、void addLast(E e):将元素添加到索引为size()-1的位置
c、E getFirst():获取索引为0的元素
d、E getFirst():获取索引为size()-1的元素
e、E removeFirst():删除索引为0的元素
f、E removeLast():删除索引为size()-1的元素
List的相关操作:
a、 void add(int index,E element):在指定索引位置添加指定元素
b、 E get(int index):根据索引返回元素
c、E remove(int index):删除指定元素并返回
d、E set(int index,Eelement):将指定索引位置的元素替换为指定元素,并将原先的元素返回