去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 显示输入:三二一 一二三