集合中常用数据结构总结

常见的和集合相关的数据结构有: 数组, 栈, 队列,链表,哈希表, 二叉树

下面简单总结一下个数据结构特点:

1. 数组

  • ArrayList(public class ArrayList extends AbstractList implements List, RandomAccess, Cloneable, Serializable)
    底层数据结构是数组,所以数组有的特点,ArrayList都有,主要具有以下特点:
    1.有序,有索引
    2.元素可以重复
    3.可以存储null值
    4.随机访问速度快,修改快,增加/插入或者移除/删除的效率慢
    5.线程不安全
  • 主要方法:
    add(E e); addAll(Collection c)clear() contains(Object o)isEmpty()remove(int index)size()toArray()

2.栈

  • stack
    储存数据特点为"先进后出",即最先存入栈的数据会进入栈低,而最后存入的数据会被最先取出;
  • 主要方法:
    empty() :测试此堆栈是否为空
    peek():查看此堆栈顶部的对象,而不从堆栈中删除它。
    pop() :删除此堆栈顶部的对象,并将该对象作为此函数的值返回。
    push(E item);将项目推送到此堆栈的顶部。
    search(Object o):返回一个对象在此堆栈上的基于1的位置。

3.队列

  • 1.Queue(public interface Queue extends Collection)
    队列通常但不一定是以FIFO(先进先出)方式排序元素;无论使用什么顺序,队列的头都是通过调用remove()或poll()删除的元素。 在一个FIFO队列,所有新元素插入到队列的尾部 。
  • 主要方法
    add(E e) :将指定的元素插入到此队列中,如果可以立即执行此操作,而不会违反容量限制, true在成功后返回 IllegalStateException如果当前没有可用空间,则抛出IllegalStateException。
    element() :检索,但不删除,这个队列的头。
    offer(E e) :如果在不违反容量限制的情况下立即执行,则将指定的元素插入到此队列中。
    peek() :检索但不删除此队列的头,如果此队列为空,则返回 null 。
    poll() :检索并删除此队列的头,如果此队列为空,则返回 null 。
    remove() :检索并删除此队列的头。
  • 2.Deque ( public interface Deque extends Queue)
    支持两端元素插入和移除的线性集合, 名称deque是“双端队列”的缩写。
  • 主要方法
    addFirst(E e)
    插入此双端队列的前面,如果它是立即可行且不会违反容量限制,抛出一个指定的元素 IllegalStateException如果当前没有空间可用。
    addLast(E e)
    在插入如果它是立即可行且不会违反容量限制,抛出此双端队列的末尾指定元素 IllegalStateException如果当前没有空间可用。
    getFirst()
    检索,但不删除,这个deque的第一个元素。
    getLast()
    检索,但不删除,这个deque的最后一个元素。
    peekFirst()
    检索,但不删除,此deque的第一个元素,或返回 null如果这个deque是空的。
    peekLast()
    检索但不删除此deque的最后一个元素,如果此deque为空,则返回 null 。
    pollFirst() :
    检索并删除此deque的第一个元素,如果此deque为空,则返回 null 。
    pollLast() :
    检索并删除此deque的最后一个元素,如果此deque为空,则返回 null 。
    removeFirst() :
    检索并删除此deque的第一个元素。
    removeLast() :
    检索并删除此deque的最后一个元素。

4.链表

  • LinkedListpublic class LinkedList extends AbstractSequentialList implements List, Deque, Cloneable, Serializable
    特点
    1.底层数据结构是链表
    2.链表的特点有序,查询和修改效率低,增加和删除效率高
    3.可以存储null值
    4.线程不安全
    5.允许重复
    6.不可排序
    7.双链表实现了List和Deque接口。
  • 主要方法:
    void addFirst(E e) :
    将指定的元素追加到此列表的末尾。
    void addLast(E e)
    将指定的元素追加到此列表的末尾。
    E getFirst()
    返回此列表中的第一个元素。
    E getLast()
    返回此列表中的最后一个元素。
    E removeFirst() ;
    从此列表中删除并返回第一个元素。
    E removeLast() :
    从此列表中删除并返回最后一个元素。

5.哈希表

  • HashSetpublic class HashSet extends AbstractSet implements Set, Cloneable, Serializable
    此类实现Set接口,由哈希表(实际为HashMap实例)支持
    特点:
    不允许null键和null值
    线程安全,效率低

6.二叉树

  • TreeMappublic class TreeMap extends AbstractMap implements NavigableMap, Cloneable, Serializable
    特点:
    键可排序,唯一,
    值有序,可重复,类似于List
    底层数据结构是自平衡的二叉树,可排序
    排序方式类似于TreeSet,分为自然排序和比较器排序,具体取决于使用的构造方法

你可能感兴趣的:(集合中常用数据结构总结)