List集合
Collection 是有序的,是指以张三李四王五的顺序进来,也以张三李四王五事物顺序出去,和排序 不是一个概念。
此接口的用户可以对列表中的每一个元素进行精确的控制,用户可以根据元素的整数索引,(在列表中的位置) 访问元素,并搜索列表中的元素。
List 的特有功能
A 添加功能
在指定位置添加元素
void add(int index,Object element)
在当前索引值的下一位就没有问题,否则就会越界
B 获取功能
Object get(int index)获取指定位置的元素,获取后对原来的数组没有影响
C 列表迭代器 是list集合特有的迭代器
ListIterator listiterator()
D 删除元素
Object remove(int index)根据索引删除元素,返回被删除的元素
E 修改功能
Object set(int ijndex,Object element) 根据索引修改元素,返回被修改的元素
列表迭代器
该迭代器,继承了iterator () 迭代器,所以,就可以使用hasNext() next() 方法
previous();返回,取前一个元素
hasPrevious();判断前面是否有元素
但是,需要注意:
如果要逆向遍历,首先要正向遍历,然后才能逆向遍历。但是,一般意义不大.
ConcurrentModificationException0
当方法检测到对象的并发修改时,但不允许修改时,就会抛出这种异常。
产生的原因
迭代器是依赖于集合而存在的,在判断成功后,集合中新添加了元素,而迭代器是不知道的,所以就报错,这个错误就是并发修改异常
其实这个问题描述的是,迭代器在遍历元素时,通过集合是不能修改元素的
解决方法
1 迭代器迭代元素,迭代器修改元素
2 集合迭代元素,集合修改元素(普通的for循环)
List 的子类特点
ArrayList()
底层是数组,查询快,增删慢
线程不安全,效率高
Vector()
底层数据结构是数组,查询快,增删慢
线程安全,效率低
已经不常用,已经有替代的方式
LinkedList()
底层数据结构是链表,查询慢,增删快
线程不安全,效率高
三个子类,选择的方式,看需求
ArrayList 的特有各功能
vector的特有功能
添加功能
public void addEliment(Object obj)——add()
获取功能
public Object elementAt(int index)——get(x)
public Enumeration elements()—- Iterator iterator()
boolean hasMoreElements()——-hasNext()
Object nextElement() ———next()
LinkedList 的特有功能
contains 方法的底层依赖的是equals方法,而学生类中没有equals方法,这个时候默认使用的父亲Object的equals方法。Object 的equals默认比较的是地址值,所以,会造成遗漏,因为new的地址值都不相同。
比较成员变量的值,需要重写equals 方法。