黑马程序员:Java基础总结----子接口 List<E>及其实现类

来源:互联网 发布:淘宝"钓鱼 编辑:程序博客网 时间:2024/05/21 05:07
黑马程序员:Java基础总结



子接口 List<E>及其实现类

 ASP.Net+Android+IO开发.Net培训、期待与您交流!




java.util
子接口 List<E>

所有已知实现类:
AbstractList, AbstractSequentialList, ArrayList, AttributeList, CopyOnWriteArrayList, LinkedList, RoleList, RoleUnresolvedList, Stack, Vector

特点:
有序的;元素可重复,有索引


Collection
     |--List:元素是有序的,元素可以重复。因为该集合体系有索引。
          |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
          |--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
          |--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。


List:
     特有方法。凡是可以操作角标的方法都是该体系特有的方法。


     add(index,element);
     addAll(index,Collection);
 voidadd(int index, E element)
          在列表的指定位置插入指定元素(可选操作)。

     remove(index);
 booleanremove(Object o)
          从此列表中移除第一次出现的指定元素(如果存在)(可选操作)。

     set(index,element);
 Eset(int index, E element)
          用指定元素替换列表中指定位置的元素(可选操作)。


     get(index):
     subList(from,to);
     listIterator();
ListIterator<E>listIterator(int index)
          返回列表中元素的列表迭代器(按适当顺序),从列表的指定位置开始。     int indexOf(obj):获取指定元素的位置。
 intlastIndexOf(Object o)
          返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。



List集合特有的迭代器。
ListIterator是Iterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。

所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。

该接口只能通过List集合的listIterator方法获取。


 voidadd(E e)
          将指定的元素插入列表(可选操作)。
intnextIndex()
          返回对 next 的后续调用所返回元素的索引。
 voidset(E e)
          用指定元素替换 next 或 previous 返回的最后一个元素(可选操作)。


LIST的实现类

ArrayList:
     底层是数组结构,查询快,增删慢,不同步。

注:对于判断是否存在,以及删除等操作,依赖的方法是元素的hashCode和equals方法

ArrayList判断是否存在和删除操作依赖的是equals方法


LinkedList:
     底层是链表结构,增删快,查询慢,不同步

特有方法:
      addFirst();       addLast();

      getFirst();       getLast();

          获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException

      removeFirst();       removeLast();

          获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException


在JDK1.6出现了替代方法。

      offerFirst();       offerLast();

      peekFirst();       peekLast();

          获取元素,但不删除元素。如果集合中没有元素,会返回null。

      pollFirst();       pollLast();

          获取元素,但是元素被删除。如果集合中没有元素,会返回null

booleanoffer(E e)
          将指定元素添加到此列表的末尾(最后一个元素)。
 Epeek()
          获取但不移除此列表的头(第一个元素)。
 Epoll()
          获取并移除此列表的头(第一个元素)
 Epop()
          从此列表所表示的堆栈处弹出一个元素。 voidpush(E e)
          将元素推入此列表所表示的堆栈。


Vector:
     底层是数组结构,线程同步,被ArrayList取代了

枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的

     Enumeration en = v.elements();

          while(en.hasMoreElements())
          {
               System.out.println(en.nextElement());
          }







 ASP.Net+Android+IO开发.Net培训、期待与您交流!

原创粉丝点击