链表
一,单链表
在链表中维护对头部节点的引用,增删头部的时间复杂度为O(1),增删查其他位置时间复杂度为O(n),需要从头部依次做比较,直到找到对应元素,但是比数组的O(n)要快,因为只比较不复制,数组需要复制
单链表可以实现栈功能,后进先出,进则insertfirst,出则deletefirst
二,双端链表
在链表中维护对头部和尾部节点的引用,增删头部和增加尾部的时间复杂度为O(1),但是无法实现删除尾部,因为没有倒数第二个对象的引用
双端链表可以实现队列功能,先进先出,进则insertlast,出则deletefirst
三,有序链表
插入元素时需遍历链表找到插入位置,因此增删某个元素时间复杂度为O(n),但是增删最小元素的复杂度为O(1),因此适合实现优先级队列,因为优先级队列往往频繁存取最小值即优先级最高的元素,还可以对数组进行排序
package fulan.data; import java.util.Arrays; import java.util.SortedSet; import java.util.TreeSet; /** * * 项目名称:TestStringUtils * 类名称:SortListDemo * 类描述: 使用sortedset对数组进行排序 * 创建人:xuanwugang * 创建时间:2018年3月26日 下午11:29:42 * 修改人:xuanwugang * 修改时间:2018年3月26日 下午11:29:42 * 修改备注: * @version * */ public class SortListDemo { public static void main(String[] args) { //创建一个sortedset SortedSet<Integer> st = new TreeSet<Integer>(); int[] myArray={2,2,5,1,4,3}; //将数组中元素依次放入sortedset中,自动拍好顺序 for(int i = 0;i<myArray.length;i++){ st.add(myArray[i]); } //将set转化为数组 Integer[] newArray = st.toArray(new Integer[0]); System.out.println(Arrays.toString(newArray)); } }
四,双向链表