java se反向迭代器_Java之路--Javase篇 API (4)

List

Collection的子类,有序可重复可索引(有脚标)。

功能如下:

添加—在指定的索引位插入元素:void add(index,element)

在指定的索引位插入一批元素:boolean addAll(int index,Collection c)

删除—删除指定index位的元素,并返回删除的元素:Object remove(int index)

获取—通过索引获取指定位置上的元素:object get(int index)

根据元素获取其位于list中的位置,如果不存在返回-1:int indexOf(object)

根据元素反向获取该元素在list中的位置,如果不存在返回-1:int lastIndexOf(object)

获取子list:List sublist(int start,int end)

特     殊列表迭代器:ListIterator ListIterator()

他是迭代器的子接口。当对元素进行迭代时,如果在迭代过程中又使用了集合对象操作元素,就容易发生ConcurrentModificationException并发修改异常。原因在于,因为在获取该迭代器时,迭代器已知的是集合现有的元素,可是在迭代器过程中,用集合对象操作元素,迭代器无法知道操作了哪些元素,做出了什么更改。

例子:

为解决上述问题List提供了自己更强大的迭代器ListIterator(原因在于它具有脚标):

增:add();

删:remove();

改:set();

查:next;

判断:hasNext();

修改—替换指定位置的元素并返回被替换的元素:Object set(index,Object)

List:有序,可重复,有索引;主要就是因为有脚标

|--ArrayList: 底层也是数组数据结构,不同步;由于数组存储是连续的,查找速度很快,更改元素效率不高;

|--LinkedList:底层是链表数据结构,非同步;由于链表存储非连续,查找速度效率不高,增删的效率较高;

|--Vector:底层也是数组数据结构,同步的,被ArrayList替代了。查询和增删的速度都不高。故被淘汰。其枚举Enumeration和Iterator功能完全一样,被后者替代:

for (Enumeration e = v.elements(); e.hasMoreElements();)

System.out.println(e.nextElement());

ArryList和Vector可变长度数组的原理:

当默认10的长度的数组不够存储时,会建立一个新数组。将原来数组的内容拷贝到新的数组当中,并将新增加的元素追加到拷贝完的数组尾,如果仍然不够重复上述动作。其中,ArryList的增加是以原来50%长度进行增加,而Vector是按照100%延长。

注意:只要是常用的容器就不是同步的,因为效率比较低。

LinkedList

LinkedList特有方法:

addLast();    //JDK1.6—offerFirst()

addFirst();   //JDK1.6—offerLast()

getLast();//返回元素,并不移除,如果集合中没有元素会出现NoSuchElementException;

getFirst();//JDK1.6—peekLast();

removeLast();//移除并返回被移除的元素,如果集合中没有元素会出现NoSuchElementException;JDK1.6—pollLast();

removeFirst();// JDK1.6—pollLast();

getLast注意:Jdk1.6中peek和poll方法如果集合中没有元素,则返回null,而不是如同get和remove方法抛出NoSuchElementException。

//JDK1.6—peekFirst();

Arraylist

Arraylist中的contains和remove方法在判断两个元素是否一致时,沿用的是Object中的equals方法,即比较的是两个对象的地址。整个List中都是如此,故当要将自定义的对象需要存储到List集合中时,需要复写对象的equals方法,建立该对象自己特有的比较两个对象是否相同的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值