每日一问(如何在List中加入、设置、获取和删除其中的元素?)

作为集合接口的一部分,对List接口所做的操作,最常见的就是增删查改了。这里总结下JAVA 中List接口及实现该接口的类实现这些操作的方法。

一.增加新的元素的方法

在Collection接口中定义了boolean add(E e)和addAll(Collection<? extends E> c)的方法,而List接口继承了Collection接口,并且List接口也定义了void add(int index, E element)的方法,因此只要是实现了List接口的类,均会实现这三个接口。

这三个个方法分别提供了在集合的最后加入指定元素/指定集合内的所有元素/指定索引位置加入指定元素的方法,虽然实际上各个类的实现不同,但是这结果是差不多的。 

另外,还有一个方法也可以插入元素,那就是通过listIterator()方法返回集合的ListIterator实例,这是一个重要的接口,可以视为Iterator的一种增强,可使得集合类可以反向遍历并且在遍历的位置插入和修改元素。

二.设置元素值的方法

List定义了E set(int index, E element)方法,可通过该方法来设置集合元素值。这里如果是LinkedList,则不推荐使用set和get方法,因为实际上LinkedList类中,使用这些方法,依然会进行遍历进行访问,效率较低,且该方法会对集合数进行计算,判断从集合头还是集合尾开始,相关源码为

Node<E> node(int index) {
        // assert isElementIndex(index);

        if (index < (size >> 1)) {
            Node<E> x = first;
            for (int i = 0; i < index; i++)
                x = x.next;
            return x;
        } else {
            Node<E> x = last;
            for (int i = size - 1; i > index; i--)
                x = x.prev;
            return x;
        }
    }

另外也可通过上文中提到的ListIterator接口来设置元素

三.获取元素值的方法 

由Iterator接口派生出的类均可以通过Iterator接口来遍历集合元素值,List接口由Iterator<E> iterator()返回对于的遍历。

List定义了E get(int index)方法,可通过该方法来获取集合元素。

另外也可通过上文中提到的ListIterator接口来获取元素

四.删除元素

Iterator接口定义了remove()方法来删除当前遍历的元素,这里需要注意的是,以下语句是错误的,因为remove()方法在调用后并不会自动将指向下一个元素。

        Iterator it = l.iterator();
        it.next();
        it.remove();
        it.remove();

List定义了E remove(int index)方法,可通过该方法来删除集合元素。 

当然,在实际上,有JAVA api提供的对List实例进行操作的方法不止这些,还有很多,这里仅是我个人使用过的方法。仅供参考

原文地址:https://www.cnblogs.com/oldfish/p/3577485.html