LinkedList集合
一、LinkedList的特有功能:
1、public void addFirst(E e)及addLast(E e) 一个是在头加,一个是在尾加,测试如下:
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addFirst("a");
list.addFirst("b");
list.addFirst("c");
list.addFirst("d");
list.addLast("e");
System.out.println(list); //[d,c,b,a,e]
}
2、public E getFirst()及getLast() 获取第一个元素,获取最后一个元素,测试如下:
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addFirst("a");
list.addFirst("b");
list.addFirst("c");
list.addFirst("d");
list.addLast("e");
System.out.println(list.getFirst()); //d
System.out.println(list.getLast()); //e
}
3、public E removeFirst()及public E removeLast() 删除第一个元素,删除最后一个元素,测试如下:
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addFirst("a");
list.addFirst("b");
list.addFirst("c");
list.addFirst("d");
list.addLast("e");
System.out.println(list.removeFirst()); //d
System.out.println(list.removeLast()); //e
System.out.println(list); //[c,b,a]
}
4、public E get(int index); 获取指定索引的元素,测试如下:
public static void main(String[] args) {
LinkedList list = new LinkedList();
list.addFirst("a");
list.addFirst("b");
list.addFirst("c");
list.addFirst("d");
list.addLast("e");
System.out.println(list.get(1)); //c
}
二、用LinkedList模拟栈数据结构的集合并测试:
1、简单例子一,用LinkedList模拟栈结构:进来的是a,b,c,d,出去的是d,c,b,a,如下:
/*
模拟进栈方法
*/
public static void main(String[] args) {
LinkedList list = new LinkedList(); //创建集合对象
list.addLast("a");
list.addLast("b");
list.addLast("c");
list.addLast("d");
System.out.println(list.removeLast()); //d
System.out.println(list.removeLast()); //c
System.out.println(list.removeLast()); //b
System.out.println(list.removeLast()); //a
}
2、例子一改进,如果我们有很多的元素,那是不是都要写很多ist.removeLast()啊?我们改进用循环:
/*
模拟进栈方法
*/
public static void main(String[] args) {
LinkedList list = new LinkedList(); //创建集合对象
list.addLast("a");
list.addLast("b");
list.addLast("c");
list.addLast("d");
while(!list.isEmpty()) { //是否为空
System.out.println(list.removeLast()); //输出d,c,b,a
}
}
3、我们发现,我们前面的两个模拟是有瑕疵的,看方法名就不像先进后出,我们做一个终极的改进模拟栈结构:
创建一个Stack实体类,封装LinkedList
public class Stack {
private LinkedList list = new LinkedList();
/*
* 模拟进栈方法
*/
public void in(Object obj) {
list.addLast(obj);
}
/*
* 模拟出栈
*/
public Object out() {
return list.removeLast();
}
/*
* 模拟栈结构是否为空
*/
public boolean isEmpty() {
return list.isEmpty();
}
}
测试一下:
public static void main(String[] args) {
Stack s = new Stack();
s.in("a"); //进栈
s.in("b");
s.in("c");
s.in("d");
while(!s.isEmpty()) { //判断栈结构是否为空
System.out.println(s.out()); //弹栈,输出d,c,b,a
}
}