java学习之List集合

时间:2022-10-23 15:37:08

List集合的特点:

有序(存储和取出的元素一致),可重复的。通过源码可发现,添加元素返回值始终为true

List集合的特有功能:

1.添加功能

void add(int index,Object element):在指定位置添加元素

2.获取功能

Object get(int index):获取指定位置的元素

3.列表迭代器

ListIterator  listIterator():List集合特有的迭代器。

该迭代器继承了Iterator迭代器,所以,就可以直接使用hasNext()和next()方法。

特有功能:

Object previous():获取上一个元素

boolean hasPrevious():判断是否有元素

注意:ListIterator 可以实现逆向遍历,但是必须先正向遍历,才能逆向遍历,所以一般无意义,不使用。

4.删除功能

Object remove(int index):根据索引删除元素,返回被删除的元素

5.修改功能

Object set(int index,Object element):根据索引修改元素,返回被修改的元素

List集合特有的遍历功能:

通过for循环 ,size()方法,以及get() 方法。


ConcurrentModificationException:当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。

产生原因:

迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器不知道,所以报错,这个错误叫并发修改异常。

其实这个问题描述的是:迭代器遍历元素的时候,通过集合是不能修改元素的。

如何解决?

A: 迭代器迭代元素,迭代器修改元素

而Iterator迭代器没有添加功能,所以使用其子接口ListIterator。添加的元素是跟在当前迭代的元素后

B:集合遍历元素,集合修改元素(普通for)

通过for循环遍历元素,然后添加元素。


数据结构:数据的组织方式。

面试题:常见的数据结构的优缺点。(自己找答案)

常见的数据结构:

l栈:先进后出
l队列:先进先出

l数组:存储同一种类型的多个元素的容器,有索引,方便获取。查询快,增删慢。要增删只能定义一个新数组。

l链表:由一个链子把多个节点连起组成的数据。节点:由数据和地址组成。(数据与和指针域组成)
链表查询慢,增删快。
l
l哈希



List集合的子类特点:

面试题:

ArrayList:底层数据结构是数组,查询快,增删慢。
线程不安全,效率高。


Vector:底层数据结构是数组,查询快,增删慢。
线程安全,效率低。

LinkedList:底层数据结构是链表,查询慢,增删快。
线程不安全,效率高。


到底使用谁呢?看需求?
分析:
要安全吗?
要:Vector(即使要,也不使用这个,后面再说)
不要:ArrayList或者LinkedList
查询多;ArrayList
增删多:LinkedList

什么都不知道,就用ArrayList。