数组:
1:有下标索引且连续存放:
缺点:插入删除效率不理想。比如插入数组时候需要移动其后面的值,效率低
优点:查找效率理想。直接按照下标查
2:固定长度
缺点:容易造成存储空间浪费与溢出
优点:使用起来比较方便,清晰
举例:
int a[] ={1,2,3} int a[] = new int[3];
链表:
1:有单向或者双向的索引
优点:插入删除速度快
缺点:查询效率较数组低
2:不固定长度,且不要求连续
优缺点与数组相反
举例:双向链表
private static class Node<E> {
E item; //数据
Node<E> next; //下个节点
Node<E> prev; //上个节点
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
}
二叉树:
顺序存储可能会浪费空间(在非完全二叉树的时候),但是读取某个指定的节点的时候效率比较高O(0) 链式存储相对二叉树比较大的时候浪费空间较少,但是读取某个指定节点的时候效率偏低O(nlogn)
举例:简单二叉树模型
public class BinaryTree {
private Node root; //本体
/**
* 内部类实现结点类,可提高安全性
* @author nishiting
*
*/
private static class Node {
Node left;
Node right;
int data;
Node(int newData) {
left = null;
right = null;
data = newData;
}
}