ArrayList和LinkedList
ArrayList是使用数组实现的,若要从数组中删除或插入某一个对象,需要移动后段的数组元素,从而会重新调整索引顺序,调整索引顺序会消耗一定的时间,所以速度上就会比LinkedList要慢许多.
相反,LinkedList是使用链表实现的,若要从链表中删除或插入某一个对象,只需要改变前后对象的引用即可!
private void init() {
//ArrayList以数组的方式来实现List接口的;
ArrayList arrayList =new ArrayList();
//LinkedList是采用链表的方式来实现List接口的;增删快
// LinkedList适合用来实现Stack(堆栈)与Queue(队列),前者先进后出,后者是先进先出.
LinkedList linkedList =new LinkedList<>();
}
//LinkedList 实现栈
public class StringStack {
private LinkedListlinkedList
=new LinkedList();
/**
* 将元素加入LinkedList容器
* (即插入到链表的第一个位置)
*/
public void push(String name) {
linkedList.addFirst(name);
}
/**
* 取出堆栈中最上面的元素
* (即取出链表linkedList的第一个元素)
*
* @return
*/
public String getTop() {
return linkedList.getFirst();
}
/**
* 取出并删除最上面的元素
* (即移出linkedList的第一个元素)
*
* @return
*/
public String pop() {
return linkedList.removeFirst();
}
/**
* 获取元素个数
*
* @return
*/
public int size() {
return linkedList.size();
}
/**
* 判断堆栈是否为空
* (即判断 linkedList是否为空)
*
* @return
*/
public boolean isEmpty() {
return linkedList.isEmpty();
}
//测试
public void test() {
StringStack stack =new StringStack();
stack.push("张三");
stack.push("李四");
stack.push("秦时明月");
System.out.print("第一个元素是:\t");
System.out.println(stack.getTop());
System.out.println();
System.out.println("全部元素:");
while (!stack.isEmpty()) {
System.out.println("\t" + stack.pop());
}
}
}
//LinkedList 实现队列
//,由于LinkedList也实现了java.util.Queue接口,所以可以直接使用LinkedList的实例来实现.
public class StringQueue {
public void test() {
//父类引用queue指向子类对象
Queue queue =new LinkedList();
//offer()方法是往队列加入元素
queue.offer("李四");
queue.offer("张三");
queue.offer("秦时明月");
String element =null;
//poll() 方法是 返回队列头部元素并移除
//peek() 方法是 返回队列头部元素 不移除
while ((element = queue.poll()) !=null) {
System.out.println(element +"\t");
}
}
}