线性表

时间:2019-09-12
本文章向大家介绍线性表,主要包括线性表使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

1. 线性表

1.1 java.util 接口 List

  • 所有已知实现类:ArrayList, LinkedList, Vector, Stack
  • 有序的 collection(也称为序列),与 set 不同,列表通常允许重复的元素

抽象方法

添加功能 add

  • boolean add(E e): 将指定的元素追加到此列表的末尾。
  • void add(int index, E element): 在列表的指定位置插入指定元素。
  • boolean addAll(Collection<? extends E> c):添加指定 collection 中的所有元素到此列表的结尾
  • boolean addAll(int index, Collection<? extends E> c):将指定 collection 中的所有元素都插入到列表中的指定位置

删除功能 remove

  • void clear(): 从列表中移除所有元素。
  • E remove(int index): 移除列表中指定位置的元素。
  • boolean remove(Object o): 从此列表中移除第一次出现的指定元素。
  • boolean removeAll(Collection<?> c): 从列表中移除指定 collection 中包含的其所有元素。

判断功能 contains, equals, isEmpty

  • boolean contains(Object o): 如果列表包含指定的元素,则返回 true。
  • boolean containsAll(Collection<?> c): 如果列表包含指定 collection 的所有元素,则返回 true。
  • boolean equals(Object o): 比较指定的对象与列表是否相等。
  • boolean isEmpty(): 如果列表不包含元素,则返回 true。

获取功能 get, indexOf, size, hashCode

  • E get(int index): 返回列表中指定位置的元素。
  • int hashCode(): 返回列表的哈希码值。
  • int indexOf(Object o): 返回此列表中第一次出现的指定元素的索引;如果此列表不包含该元素,则返回 -1。
  • lastIndexOf(Object o): 返回此列表中最后出现的指定元素的索引;如果列表不包含此元素,则返回 -1。
  • int size(): 返回列表中的元素数。
  • List subList(int fromIndex, int toIndex): 返回列表中指定的 fromIndex(包括 )和 toIndex(不包括)之间的部分视图。

修改功能 set

  • E set(int index, E element): 用指定元素替换列表中指定位置的元素。

迭代器功能 iterator

  • Iterator iterator(): 返回按适当顺序在列表的元素上进行迭代的迭代器。
  • ListIterator listIterator(): 返回此列表元素的列表迭代器。

其他功能 toArray

  • Object[] toArray(): 返回按适当顺序包含列表中的所有元素的数组(从第一个元素到最后一个元素)。
  • boolean retainAll(Collection<?> c): 仅在列表中保留指定 collection 中所包含的元素。

注意事项

  • 迭代器功能可用增强for替换: for(E e : list)
  • 获取长度为:int size()不是length()
  • 集合和数组的区别?

    A:长度区别  
        数组固定  
        集合可变  
    B:内容区别  
        数组可以是基本类型,也可以是引用类型  
        集合只能是引用类型  
    
  • 并发修改异常?

    A:出现的现象
        迭代器遍历集合,集合修改集合元素
    B:原因
        迭代器是依赖于集合的,而集合的改变迭代器并不知道。
        Iterator在迭代时,只能对元素进行获取next()和删除remove()的操作。
    C:解决方案
        a:迭代器遍历,迭代器修改(ListIterator)
            元素添加在刚才迭代的位置
        b:集合遍历,集合修改(size()和get())
            元素添加在集合的末尾
    

1.2 java.util 类 ArrayList

  • List 接口的大小可变数组的实现:transient Object[] elementData
  • 是随机存取结构,查找块,增删慢
  • 实现不是同步的,线程不安全

具体方法

构造方法

  • public ArrayList(int initialCapacity):构造一个具有指定初始容量的空列表。
  • public ArrayList():构造一个初始容量为 10 的空列表。
  • public ArrayList(Collection<? extends E> c):构造一个包含指定 collection 的元素的列表。

特殊方法

  • public Object clone():返回此 ArrayList 实例的浅表副本。(不复制这些元素本身。)
  • public void ensureCapacity(int minCapacity):如有必要,增加此 ArrayList 实例的容量,以确保它至少能够容纳最小容量参数所指定的元素数。
  • protected void removeRange(int fromIndex, int toIndex):移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之间的所有元素。
  • public void trimToSize():将此 ArrayList 实例的容量调整为列表的当前大小。

1.3 java.util 类 LinkedList

  • List 接口的链接列表实现,底层双向列表实现。
  • 不是随机存取结构,查找慢,增删快
  • 此实现不是同步的,线程不安全

具体方法

构造方法

  • public LinkedList():构造一个初始容量为 10 的空列表。
  • public LinkedList(Collection<? extends E> c):构造一个包含指定 collection 的元素的列表。

栈方法

  • public void push(E e):将该元素插入此列表的开头, 此方法等效于 addFirst(E)
  • public E pop():移除并返回此列表的第一个元素, 此方法等效于 removeFirst()

队列方法

  • boolean add(E e): 将指定的元素追加到此列表的末尾。
  • public E peek():获取但不移除此列表的头(第一个元素)。
  • public E poll():获取并移除此列表的头(第一个元素)。

特有方法

  • public void addFirst(E e)
  • public void addLast(E e)
  • public E removeFirst()
  • public E removeLast()
  • public E getFirst()
  • public E getLast()

1.4 java.util 类 Vector

  • 可以实现可增长的对象数组:protected Object[] elementData;
  • 是随机存取结构,查找块,增删慢
  • 实现是同步的,线程安全

特有方法

  • public void addElement(E obj):add()
  • public E elementAt(int index):get()
  • public Enumeration elements():iterator()

1.5 综合比较

    ArrayList
        底层数据结构是数组,查询快,增删慢。
        线程不安全,效率高。
    Vector
        底层数据结构是数组,查询快,增删慢。
        线程安全,效率低。
    LinkedList
        底层数据结构是链表,查询慢,增删快。
        线程不安全,效率高。

原文地址:https://www.cnblogs.com/Stephanie-boke/p/11515148.html