数组
相同数据类型的元素按一定顺序排列的集合,是一块连续的内存空间。优点:get和set的时间复杂度是O(1);缺点:add和remove的时间复杂度是O(n)
链表
非连续、非顺序的结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的,链表有一系列点组成。优点:add和remove的时间复杂度是O(1);缺点:get和set的时间复杂度是O(n)
队列
队列是一种特殊的线性表,特殊之处是它只允许在表的前端进行删除操作,而在表的后端进行删除操作,亦即所谓的先进先出(FIFO)。Java中LinkedList实现了Dueue,可以作为双向队列,PriorityQueue实现了带优先级的队列,亦即队列中的每一个元素都有优先级,且元素按照优先级排序
栈
栈是一种运算受限的线性表,其限制是只允许在表的一端进行插入和删除操作,这一端被称为栈顶,相对的,把另一端称为栈底,它体现了后进先出(LIFO)
集合
集合是指具有某种性质的具体或抽象的对象汇总成的集体,这些对象称为集合的元素,其主要特性是不可重复。在Java中HashSet体现了这种数据结构,而HashSet是在HashMap的基础上构建的。LinkedHashSet继承了HashSet,使用HashCode确定在集合中的位置,使用链表的方式确定位置,所以有顺序。TreeSet实现了SortedSet接口,是排好序的集合(在TreeMap基础上构建),因此查找操作比普通的HashSet要快(Log(n)),插入操作要慢(Log(n)),因为要维护有序。
散列表
散列表也叫哈希表,是根据关键键值(key-value)进行访问的数据结构,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度,这个映射函数就叫做散列函数。
树
二叉树,排序二叉树,红黑树,平衡二叉树AVLTree,二叉查找树binary tree search,平衡多路查找树B-Tree