链表
一,单链表
在链表中维护对头部节点的引用,增删头部的时间复杂度为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));
}
}
四,双向链表