A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

        List:集合中的元素是有序的,元素可以重复。因为该集合体系有索引。以下为三个常见子类对象:
                1,ArrayList:底层的数据结构使用的是数组形式。查询非常快,增删慢。线程同步。它是可变长度数组,就是默认容量是10,要存储的数据量超过10时,就会新创建一个数组,容量延长50%,然后把原数组中的数据copy到新数组中,然后再添加数据到后面,最后把原来的数组删除。
                2,LinkedList:底层使用的是链表数据结构。增删很快,查询稍慢。
                        LinkedList特有方法:
                                addFirst();
                                addLast();
                                getFirst();
                                getLast();
                                获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementsException.
                                removeFirst();
                                removeLast();
                                获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementsException.
                               
                                在JDK1.6中出现了替代方法。
                                offertFirst();     offerLast();
                                peekFirst();      peekLase();
                                获取元素,但不删除元素。如果集合中没有元素,则会返回null.
                                pollFirst();   pollLast();
                                获取元素,但是元素被删除。如果集合中没有元素,则会返回null.
                3,Vector:底层是数组数据结构。线程同步。被ArrayList替代。
                可变长度数组,100%延长。
                Vector中的枚举是其特有的取出方式。

枚举和迭代器很像,其实枚举和迭代器一样,因为枚举的名称以及方法的名称都过长,所以被迭代器取代了。
List特有的方法:凡是可以操作角标的方法都是该体系特有的方法。

增:add(index,element) ,addAll(index,Collection)
删:remove(index)
改:set(index,element)
查:get(index)(通过size的配合可以遍历集合),subList(from,to),Iterator(),listIterator(),indexOf()等。
       
不能对同一组元素进行多种同时操作,可能会引发并发情况。不能使用集合和迭代器同时操作一组元素。

在迭代过程中准备添加或者删除元素:listIterator()(继承iterator)。
List集合特有的迭代器ListIterator是Iterator的子接口。在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。
        ArrayList al = new ArrayList();
        Iterator it = al.iterator();
        While(it.hasNext())
        {
                Object obj = it.next();
                If(obj.equals("java02"))
                        Al.add("java005");//错。通过集合对象的方式操作了集合中的元素,引发并发异常。
                Sop(obj);

}(在通过迭代器的方式操作元素时,又通过集合的方式操作元素,产生了并发修改异常)
所以,在迭代器时,只能用迭代器的方法操作元素,可是Iterator的方法是有限的,只能对元素进行判断,取出,删除的操作。如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。该接口只能通过List集合的ListIterator方法实现。
        ListIteretor li = al.listTterator();
List集合判断元素是否相同,依据的是元素的equals方法,而不是对象的地址值。删除的时候,加入的时候判断重复等。
您需要登录后才可以回帖 登录 | 加入黑马