Java – 集合List
简介
List 是 Collection 下面的一个子接口,它提供了包含索引的操作方法。
List特有方法
add() 增加
在此集合中的指定位置插入指定的元素
void add(index, E ele)
代码实现
// 创建一个集合
List<String> c = new ArrayList<>();
c.add("aaa");
c.add("bbb");
c.add("ccc");
c.add("ddd");
c.add("eee");
c.add(1,"qqq");
System.out.println(c);
// [aaa, qqq, bbb, ccc, ddd, eee]
原来索引上的元素会依次往后移
remove() 删除
删除指定索引处的元素,返回被删除的元素
E remove(int index)
代码实现
c.remove(1);
set() 修改
修改指定索引处的元素,返回被修改的元素
E set(int index , E ele)
代码实现
c.set(1,"asd");
get() 返回
返回指索引处的元素
E get(int index)
代码实现
c.get(1);
迭代器 Iterator
迭代器是集合专用的遍历方式
获取迭代器
Iterator<E> iterator()
返回迭代器对象,默认指向当前集合的0索引
Iterator常用方法
boolean hasNext()
判断当前位置是否有元素,有元素返回true,没有元素返回falses
E next()
获取当前位置的元素,并将迭代器对象移向下一个位置。
获取迭代器并遍历数据
// 创建一个集合
List<String> c = new ArrayList<>();
c.add("aaa");
c.add("bbb");
c.add("ccc");
c.add("ddd");
c.add("eee");
// 创建迭代器并遍历
Iterator<String> it = c.iterator();
while (it.hasNext())
{
String str = it.next();
System.out.println(str);
}
迭代器注意:
1.当指针到达最后时依然调用 next() 方法会报错 NoSuchElementException 异常
2.迭代器遍历完毕,指针不会复位,如果想重新遍历需要重新获取新的迭代器
3.循环中只能用一次next() 否则容易出现 NoSuchElementException
4.迭代器遍历时,不能用集合的方法进行增加或者删除
如果我们实在要删除,那么可以用迭代器提供的 remove 方法进行删除
如果要添加,暂时没有办法。
列表迭代器ListIterator
获取一个列表迭代器
ListIterator<String> it = list.listIterator();
实现方法
ListIterator 增加了可在遍历的时候增加成员,还可在遍历的过程中修改成员数据。
void add(E e)
将指定的元素插入列表(可选操作)。
boolean hasNext()
以正向遍历列表时,如果列表迭代器有多个元素,则返回 true(换句话说,如果 next 返回一个元素而不是抛出异常,则返回 true)。
boolean hasPrevious()
如果以逆向遍历列表,列表迭代器有多个元素,则返回 true。
E next()
返回列表中的下一个元素。
int nextIndex()
返回对 next 的后续调用所返回元素的索引。
E previous()
返回列表中的前一个元素。
int previousIndex()
返回对 previous 的后续调用所返回元素的索引。
void remove()
从列表中移除由 next 或 previous 返回的最后一个元素(可选操作)。
void set(E e)
用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。
增强for遍历
增强 for 的底层就是迭代器,为了简化迭代器的代码书写的
它是JDK5之后出现的,其内部原理就是一个 Iterator 迭代器
所有的单列集合和数组才能用增强 for 进行遍历
增强 for 格式
for (元素的数据类型 变量名:数组或者集合) {}
方法实现
// 创建一个集合 List<String> c = new ArrayList<>();
c.add("aaa");
c.add("bbb");
c.add("ccc");
c.add("ddd");
c.add("eee");
// 遍历增强,s 其实就是一个第三方变量,在循环的过程中依次表示集合中的每一个数据
for (String s:List) {
sout(s);
}
IDEA中使用 list.for 即可弹出格式选项
注意:修改增强for中的变量,不会改变集合中原本的数据
Lambda表达式遍历
JDK8之后推出的Lambda表达式后,提供了一种更简单直接的遍历集合的方式
方法格式
结合 lambda 遍历集合
default void forEach(Consumer<? super T> action):
代码实现
我们先来看看使用匿名内部类的实现方法:
// 创建一个集合
List<String> c = new ArrayList<>();
c.add("aaa");
c.add("bbb");
c.add("ccc");
c.add("ddd");
c.add("eee");
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
// 这里传来的 s 即是 ArrayList 集合的每一个遍历成员
System.out.println(s);
}
});
通过lambda可以简写成以下样式
// 创建一个集合
List<String> c = new ArrayList<>();
c.add("aaa");
c.add("bbb");
c.add("ccc");
c.add("ddd");
c.add("eee");
c.forEach(s->System.out.println(s));
普通 for 遍历
for (int i = 0; i < c.size(); i++) {
System.out.println(c.get(i));
}
共有 0 条评论