去SA面试的时候,面试官问我平时用Java的什么数据结构,答曰:Vector。又问:哪有用过其他的的吗?例如List和Map之类的。答曰:甚少。(自己汗一个,没水平)既然不会就要学习啦。
 翻开《Java学习笔记》,里面对对象容器的描述不错。
 1. ArrayList和LinkedList
 ArrayList使用了数组结构实现List的数据。所以ArraryList用来快速定位对象是非常有效率的。但是如果要对ArraryList中间插入或者删除,效率会非常低。
 LinkedList使用链表来实现的List。所以跟ArrayList相反,LinkedList对于插入和删除是非常有优势,反之对于快速定位,是LinkedList的弱项。
 1)ArrayListDemo
 public class ArrayListDemo {
    public static void main(String[] args) {
        
        //用Scanner类,可以轻松获得commander的输入
        Scanner scanner = new Scanner(System.in);
        
        List<String> list = new ArrayList<String>();
        
        //在控制台输入,quit退出
        while(true) {
            System.out.print("Rokey@console# ");
            String input = scanner.next();
            if(input.equals("quit")) {
                break;
            }
            list.add(input);
        }
        
        System.out.print("显示输入:");
        
        //使用5.0的foreach功能对List进行遍历
        for(String s:list) {
            //5.0的类C的输出格式
            System.out.printf("%s ",s);
        }
    }
}输出:
Rokey@console# 一二三
Rokey@console# 三二一
Rokey@console# quit
显示输入:一二三 三二一 
 
2)用LinkedList实现的一个字符串栈
/**
 *
 * @author Rokey
 * 用LinkedList构建一个字符栈,先进先出
 */
public class StringStack {
    private LinkedList<String> linkList;
    public StringStack() {
        linkList = new LinkedList<String>();
    }
    public void push(String s) {
        //将元素加入链表第一个位置
        linkList.addFirst(s);
    }
    public String pop() {
        //删除链表第一个元素,并返回
        return linkList.removeFirst();
    }
    public String top() {
        //返回链表第一个元素,但并不删除
        return linkList.getFirst();
    }
    public boolean isEmpty() {
        //检查链表是否为空
        return linkList.isEmpty();
    }
}public class StringStackDemo {
    public static void main(String[] args) {
        //用Scanner类,可以轻松获得commander的输入
        Scanner scanner = new Scanner(System.in);
        StringStack stack = new StringStack();
        //在控制台输入,quit退出
        while (true) {
            System.out.print("Rokey@console# ");
            String input = scanner.next();
            if (input.equals("quit")) {
                break;
            }
            stack.push(input);
        }
        System.out.print("显示输入:");
        //使用5.0的foreach功能对List进行遍历
        
        while(!stack.isEmpty()) {
            //5.0的类C的输出格式
            System.out.printf("%s ", stack.pop());
        }
    }
}输出:
Rokey@console# 一二三
Rokey@console# 三二一
Rokey@console# quit
显示输入:三二一 一二三