47. List中特有的方法
集合的体系:
--------------| Collection 单列集合的根接口
----------| List 如果实现了List接口的集合类,该类具备的特点是:有序,可重复
----------| Set 如果实现了Set几口的集合类,该类具备的特点:无序,不可重复
list的特有方法:
添加
add(int index, E element) 把元素添加到指定索引的位置
addAll(int index, Collection<? extends E> c) 根据索引把一个集合中的所有元素添加到另一个集合中
删除
remove(int index) 根据索引删除集合中的指定元素
查看
get(int index) 获取集合中指定索引处的元素
subList(int fromIndex, int toIndex) 指定开始和结束位置,获取集合中的一些元素(包头不包尾)
indexOf(Object o) 获取集合中指定元素第一次出现的位置(索引值)
lastIndexOf(Object o) 获取集合中指定元素最后一次出现的位置(索引值)
修改
set(int index, E element) 替换指定元素中的元素(element:修改后的值)
迭代器
listIterator() 返回列表中元素的列表迭代器
listIterator(int index) 返回列表中指定元素的列表迭代器(index:开始位置)
总结:我们发现List接口中特有的方法都存在索引值,所以我们如果要
listIterator特有的方法:
hasPrevious() 判断是否有上一个元素
previous() 指针先向下移动一位,再取出当前指针指向的元素
next() 先取出当前指针指向的元素,指针再向下移动一位
add() 把元素添加到当前的指针指向的位置
set() 用指定元素替换 next 或 previous 返回的最后一个元素
注意:当我们开始迭代的时候,指针默认指定的是第一个元素
下面我们来一段代码:
public static void main(String[] args) { List list = new ArrayList(); list.add("张三"); list.add("李四"); list.add("王五"); ListIterator listit = list.listIterator(); while(listit.hasNext()) { System.out.print(listit.next()+","); } System.out.println(""); while(listit.hasPrevious()) { System.out.print(listit.previous()+","); } }
这时我们是不是感到很疑惑:为什么第二个循环输出王五呢?按照上面的说法,第二个循环只能取出李四和张三吗?
首先我们来看看next的定义:
next() 先取出当前指针指向的元素,指针再向下移动一位
我们可以发现:当next去除最后一个元素的时候指针往下移动了一位,然后才判断没有元素了。
按照上面的例子,这个时候的指针指向的是3(索引)
我们再看previous方法的定义:
previous() 指针先向下移动一位,再取出当前指针指向的元素
我们可以发现,如果这个时候指针指向的是3,那么指针再向上移动一位,这个时候的指针指向的是2,所以输出了王五