wonderer's program

everything will be better
posts - 19, comments - 6, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

《Java学习笔记》--对象容器之ArrayList和LinkedList

Posted on 2007-12-27 23:05 wonderer 阅读(3058) 评论(0)  编辑  收藏 所属分类: java

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

只有注册用户登录后才能发表评论。


网站导航: