源码分析篇--Java集合操作(4)

2、List的实现类
List是一个接口,继承自Collection接口,包为java.util.*,由于继承的特性,因此,List接口具有了Collection接口的全部方法。但是,List本身又重新定义了这些方法:
int size();

boolean isEmpty();

boolean contains(Object o);

Iterator iterator();

Object[] toArray();

T[] toArray(T[] a);

boolean add(E e);

boolean remove(Object o);

boolean containsAll(Collection<?> c);

boolean addAll(Collection<? extends E> c);

boolean addAll(int index, Collection<? extends E> c);

boolean removeAll(Collection<?> c);

boolean retainAll(Collection<?> c);

void clear();

boolean equals(Object o);

int hashCode();

E get(int index);

void add(int index, E element);

E remove(int index);

int indexOf(Object o);

int lastIndexOf(Object o);

ListIterator listIterator();

ListIterator listIterator(int index);

List subList(int fromIndex, int toIndex);
我们看到,List接口在Collection接口的基础上,新增了get、indexOf、lastIndexOf、listIterator和subList几个方法。这几个方法的使用方法如下所示。
2.1 get(int index)方法
该方法通过集合索引返回对应的元素。例如:
List list = new ArrayList();
for(int i = 0;i<5;i++){
list.add((i+1)+"");
}
System.out.println(list.get(0));
如果index索引大于集合的最大索引,那么会报告一个名为java.lang.IndexOutOfBoundsException的异常。
2.2 indexOf(元素值)方法
这个方法通过该list集合的元素a返回第一个a元素在list集合中的索引。例如:
for(int i = 0;i<5;i++){
list.add((i+1)+"");
}
list.add(“2”);

System.out.println(list.indexOf(“2”));//2
如果元素不存在,那么返回-1,表示该元素不存在。
2.3 lastIndexOf(元素值)方法
这个方法通过该list集合的元素a返回最后一个a元素在list集合中的索引。例如:
List list = new ArrayList();
for(int i = 0;i<5;i++){
list.add((i+1)+"");
}
list.add(“2”);
System.out.println(list.lastIndexOf(“2”));//5
2.4 subList(a,b)方法
该方法将返回从list的a至b之间的索引对应元素的list集合。当a<0或b>list.size()时会报告java.lang.IndexOutOfBoundsException该异常。例如:
System.out.println(list.subList(1,5));//[2, 3, 4, 5]
2.5 listIterator()方法
List的listIterator()方法会返回一个ListIterator迭代器对象,该迭代器的功能和Iterator迭代器基本相同,基本使用如下所示:
ListIterator iterator = list.listIterator();
for(;iterator.hasNext()?{
String value = iterator.next();
System.out.print(value+" “);
}
如果使用iterator()方法,我们也可以对list元素进行迭代,(iterator()是对Iterable接口iterator()方法的覆盖):
System.out.println(”\nIterator的iterator()方法:");
Iterator iterator2 = list.iterator();
while(iterator2.hasNext()){
String value = iterator2.next();
System.out.print(value+" ");
}
但是,ListIterator和Iterator迭代器还有区别:
a、listIterator继承自Iterator,继承结构如下所示。
public interface ListIterator extends Iterator

b、Iterator迭代器仅有三个方法,分别是hasNext()、next()和remove(),能够实现顺序遍历和元素的删除;我们来看一下使用迭代器删除list集合的元素:
System.out.println("\nIterator的remove方法:");
Iterator iterator3 = list.iterator();
while(iterator3.hasNext()){
String value = iterator3.next();
//删除5这个元素
if(“5”.equals(value)){
iterator3.remove();
}
}

for(String s:list){
System.out.print(s+" “);
}
而ListIterator迭代器除了实现上面Iterator的功能外,还可以通过add()方法添加元素:
System.out.println(”\nListIterator的remove方法:");
ListIterator iterator4 = list.listIterator();
while(iterator4.hasNext()){
String value = iterator4.next();
if(“2”.equals(value)){
iterator4.remove();
}
}
//添加元素
iterator4.add(“5”);
iterator4.add(“6”);
for(String s:list){
System.out.print(s+" ");
}

c、ListIterator支持逆序遍历,可以使用hasPrevious()和previous()来实现list的逆序遍历:
System.out.println("\nListIterator的逆序遍历:");
while(iterator4.hasPrevious()){
String value = iterator4.previous();
System.out.print(value+" ");
}

d、ListIterator支持元素的修改,可以通过set方法对list现有的元素进行修改,注意,修改的是list的元素,当前的迭代器的元素的更改可能不会生效:
System.out.println("\nListIterator元素的设置:");
while(iterator4.hasNext()){
String value = iterator4.next();
iterator4.set(value+"-");
System.out.print(value+" “);
}
System.out.println();
for(String s:list){
System.out.print(s+” ");
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值