Java集合类之——List篇

List接口

  • List继承了Collection,是有序的列表。
  • 实现类有ArrayList、Vector、LinkedList、Stack等
    • ArrayList是基于数组实现的,是一个数组队列。可以动态的增加容量!
    • Vector是基于数组实现的,是一个矢量队列,是线程安全的!
    • LinkedList是基于链表实现的,是一个双向循环列表。可以被当做堆栈使用!
    • Stack是基于数组实现的,是栈,它继承与Vector,特性是FILO(先进后出)

实用场景
- 如果使用到队列,栈,链表,可以使用List。
- 当集合中对插入速度要求不高,但要求访问元素数据的速度,则使用ArrayList
- 当集合中对访问元素数据的速度要求不高,但是对插入和删除数据速度要求高,则使用LinkedList
- 当集合中有多线程对集合元素进行操作时候,此时为了线程安全可以使用Vector!但是BVector现在一般不再使用。
- 当集合中有需求是希望后保存的数据先读取出来,使用Stack

ArrayList[重点]
  • 数组结构实现,查询快、增删慢;
  • JDK1.2版本,运行效率快,线程不安全;
ArrayList的简介
  • ArrayList基于数组实现,是一个动态的数组队列。但是它和数组又不一样,容量可以自动增长。
  • ArrayList继承了AbstractList,实现了RandomAccess、Cloneable和Serializable接口
  • 集成了AbstractList,AbstractList又继承了AbstractCollection实现了List接口,它是一个数组队列,提供了相关的添加、删除、修改、遍历等功能
  • 实现了RandomAccess接口,提供了随机访问功能,实际上就是通过下标序号进行快速访问。
  • 实现了Serializable接口,支持序列化,也就意味了ArrayList能够通过序列化传输。

ArrayList 的一些方法

返回值方法
booleanadd(E object)
booleanaddAll(Collection<? extends E> collection)
voidclear()
booleancontains(Object object)
booleancontainsAll(Collection<?> collection)
booleanequals(Object object)
inthashCode()
booleanisEmpty()
Iteratoriterator()
booleanremove(Object object)
booleanremoveAll(Collection<?> collection)
Objectclone()
ListsubList(int start, int end)
Eset(int location, E object)
Eremove(int location)
ListIteratorlistIterator()
ListIteratorlistIterator(int location)
intlastIndexOf(Object object)
intindexOf(Object object)
Eget(int location)
booleanaddAll(int location, Collection<? extends E> collection)
voidadd(int location, E object)
Object[]toArray()
T[]toArray(T[] array)
intsize()
booleanretainAll(Collection<?> collection)
voidtrimToSize()
voidremoveRange(int fromIndex, int toIndex)
voidensureCapacity(int minimumCapacity)
Vector
  • 数组结构实现,查询快、增删慢;
  • JDK1.0版本,运行效率慢,线程安全;
  • Vector 类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。
  • Vector 继承了AbstractList,实现了List;所以,它是一个队列,支持相关的添加、删除、修改、遍历等功能。
  • vector实现了RandmoAccess接口,即提供了随机访问功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在Vector中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
  • Vector 实现Serializable接口,支持序列化。
synchronized boolean        add(E object)
             void           add(int location, E object)
synchronized boolean        addAll(Collection<? extends E> collection)
synchronized boolean        addAll(int location, Collection<? extends E> collection)
synchronized void           addElement(E object)
synchronized int            capacity()
             void           clear()
synchronized Object         clone()
             boolean        contains(Object object)
synchronized boolean        containsAll(Collection<?> collection)
synchronized void           copyInto(Object[] elements)
synchronized E              elementAt(int location)
             Enumeration<E> elements()
synchronized void           ensureCapacity(int minimumCapacity)
synchronized boolean        equals(Object object)
synchronized E              firstElement()
             E              get(int location)
synchronized int            hashCode()
synchronized int            indexOf(Object object, int location)
             int            indexOf(Object object)
synchronized void           insertElementAt(E object, int location)
synchronized boolean        isEmpty()
synchronized E              lastElement()
synchronized int            lastIndexOf(Object object, int location)
synchronized int            lastIndexOf(Object object)
synchronized E              remove(int location)
             boolean        remove(Object object)
synchronized boolean        removeAll(Collection<?> collection)
synchronized void           removeAllElements()
synchronized boolean        removeElement(Object object)
synchronized void           removeElementAt(int location)
synchronized boolean        retainAll(Collection<?> collection)
synchronized E              set(int location, E object)
synchronized void           setSize(int length)
synchronized int            size()
synchronized List<E>        subList(int start, int end)
synchronized <T> T[]        toArray(T[] contents)
synchronized Object[]       toArray()
synchronized String         toString()
  • [注意] : Vector跟ArrayList基本一致知识Vector是线程安全的方法多用synchronize修饰,所以速度比ArrayList慢很多
LinkedList
  • 数组结构实现,查询慢、增删快;
  • JDK1.2版本,运行效率快,线程不安全;
  • LinkedList是基于链表实现的,从源码可以看出是一个双向链表。除了当做链表使用外,它也可以被当作堆栈、队列或双端队列进行操作。是线程不安全。
  • LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
  • LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
boolean add(E e) 
     将指定元素添加到此列表的结尾。
 void   add(int index, E element) 
     在此列表中指定的位置插入指定的元素。
 boolean    addAll(Collection<? extends E> c) 
     添加指定 collection 中的所有元素到此列表的结尾,顺序是指定 collection 的迭代器返回这些元素的顺序。
 boolean    addAll(int index, Collection<? extends E> c) 
      将指定 collection 中的所有元素从指定位置开始插入此列表。
 void   addFirst(E e) 
      将指定元素插入此列表的开头。
 void   addLast(E e) 
     将指定元素添加到此列表的结尾。
 void   clear() 
    从此列表中移除所有元素。
 Object clone() 
     返回此 LinkedList 的浅表副本。
 boolean    contains(Object o) 
     如果此列表包含指定元素,则返回 true。
 Iterator<E>    descendingIterator() 
     返回以逆向顺序在此双端队列的元素上进行迭代的迭代器。
 E  element() 
    获取但不移除此列表的头(第一个元素)。
 E  get(int index) 
   返回此列表中指定位置处的元素。
 E  getFirst() 
    返回此列表的第一个元素。
 E  getLast() 
    返回此列表的最后一个元素。
 int    indexOf(Object o) 
    返回此列表中首次出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1int    lastIndexOf(Object o) 
    返回此列表中最后出现的指定元素的索引,如果此列表中不包含该元素,则返回 -1。
 ListIterator<E>    listIterator(int index) 
   返回此列表中的元素的列表迭代器(按适当顺序),从列表中指定位置开始。
 boolean    offer(E e) 
    将指定元素添加到此列表的末尾(最后一个元素)。
 boolean    offerFirst(E e) 
    在此列表的开头插入指定的元素。
 boolean    offerLast(E e) 
    在此列表末尾插入指定的元素。
 E  peek() 
    获取但不移除此列表的头(第一个元素)。
 E  peekFirst() 
    获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。
 E  peekLast() 
   获取但不移除此列表的最后一个元素;如果此列表为空,则返回 null。
 E  poll() 
    获取并移除此列表的头(第一个元素)
 E  pollFirst() 
     获取并移除此列表的第一个元素;如果此列表为空,则返回 null。
 E  pollLast() 
     获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。
 E  pop() 
    从此列表所表示的堆栈处弹出一个元素。
 void   push(E e) 
    将元素推入此列表所表示的堆栈。
 E  remove() 
    获取并移除此列表的头(第一个元素)。
 E  remove(int index) 
   移除此列表中指定位置处的元素。
 boolean    remove(Object o) 
     从此列表中移除首次出现的指定元素(如果存在)。
 E  removeFirst() 
    移除并返回此列表的第一个元素。
 boolean    removeFirstOccurrence(Object o) 
     从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表时)。
 E  removeLast() 
    移除并返回此列表的最后一个元素。
 boolean    removeLastOccurrence(Object o) 
     从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表时)。
 E  set(int index, E element) 
    将此列表中指定位置的元素替换为指定的元素。
 int    size() 
    返回此列表的元素数。
 Object[]   toArray() 
    返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组。
<T> T[] toArray(T[] a) 
     返回以适当顺序(从第一个元素到最后一个元素)包含此列表中所有元素的数组;返回数组的运行时类型为指定数组的类型。

  • LinkedList的实现是基于双向循环链表,实现的 List和Deque 接口。实现所有可选的列表操作,并允许所有元素。
  • LinkedList是非线程安全的,只在单线程下适合使用。
  • 这个类的iterator和返回的迭代器listIterator方法是fail-fast ,要注意ConcurrentModificationException 。
  • LinkedList实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。
  • 在查找和删除某元素时,都分为该元素为null和不为null两种情况来处理,LinkedList中允许元素为null。
  • 由于是基于列表的,LinkedList的没有扩容方法,默认加入元素是尾部自动扩容。
  • LinkedList还实现了栈和队列的操作方法,因此也可以作为栈、队列和双端队列来使用,如peek 、push、pop等方法。
  • LinkedList是基于链表实现的,因此插入删除效率高,查找效率非常低(
Stack
  • Stack 类表示后进先出(LIFO)的对象堆栈。
  • 提供 push 和 pop 操作与 peek 方法、 empty 方法、search 方法。
  • 继承自Vector,那么它的实现原理是以数组实现堆栈的。
  • 是线程安全的
boolean empty() 
      测试堆栈是否为空。
E   peek() 
      查看堆栈顶部的对象,但不从堆栈中移除它。
E   pop() 
      移除堆栈顶部的对象,并作为此函数的值返回该对象。
E   push(E item) 
      把项压入堆栈顶部。
int search(Object o) 
      返回对象在堆栈中的位置,以 1 为基数。
  • Stack实际上也是通过数组去实现的。实际调用的实现方法都是Vector中的方法!

  • push时(即,将元素推入栈中),是通过将元素追加的数组的末尾中。

  • peek时(即,取出栈顶元素,不执行删除),是返回数组末尾的元素。

  • pop时(即,取出栈顶元素,并将该元素从栈中删除),是取出数组末尾的元素,然后将该元素从数组中删除。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值