<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Cyh的博客

    Email:kissyan4916@163.com
    posts - 26, comments - 19, trackbacks - 0, articles - 220

    ArrayList、Vector和LinkedList

    Posted on 2009-05-30 23:55 啥都寫點 閱讀(678) 評論(0)  編輯  收藏 所屬分類: J2SE
    關鍵技術:
    • ArrayList是最常用的List實現類,內不是通過數組實現的,它允許對元素進行快速隨機訪問。數組的缺點是每個元素之間不能含有“空隙”,當數組大小不滿足時需要增加存儲能力,就要將已有數組數據復制到新的存儲空間中。當從ArrayList的中間位置插入或者刪除元素時,需要對數組進行復制、移動,代價比較高。因此,它適合隨機查找和遍歷,不適合插入和刪除。
    • Vector與ArrayList一樣,也是通過數組實現的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠Vector,避免多線程同時寫而引起的不一致性,但實現同步需要很高的花費,因此,訪問它比訪問AarryList慢
    • LinkedList是用鏈表結構存儲數據的,很適合數據的動態插入和刪除,隨機訪問和遍歷速度比較慢。另外,它還提供了List接口中沒有定義的方法,專門用于操作表頭和表尾元素,可以當做堆棧、隊列和雙向隊列使用。

    package book.arrayset;

    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.ListIterator;
    import java.util.Stack;
    import java.util.Vector;

    /**
     * 演示各種List的使用
     * List是能維護元素的次序,它允許元素重復
     
    */
    public class TestList {
        
        
    /**
         * 初始化一個List
         * 
    @param list
         
    */
        
    public static void init(List list){
            
    if(list != null){
                list.add(
    "aaa");
                list.add(
    "ccc");
                list.add(
    "bbb");
                list.add(
    "eee");
                list.add(
    "ddd");
            }
        }
        
    /**
         * 輸出List的內容
         * 
    @param list
         
    */
        
    public static void output(List list){
            
    if (list != null){
                
    //根據列表下標遍歷,使用list.size()獲取列表中元素的個數
                for (int i=0; i<list.size(); i++){
                    System.out.print(list.get(i) 
    + "  ");
                }
                
    //或者用迭代器遍歷
                Iterator it  = list.iterator();
                Object value 
    = null;
                
    while (it.hasNext()){
                    value 
    = it.next();
                    
    //System.out.println(value);
                }
            }
            System.out.println();
        }
        
    /**
         * 使用ArrayList
         
    */
        
    public static void testArrayList(){
            List list 
    = new ArrayList();
            init(list);
            System.out.println(
    "使用ArrayList: ");
            output(list);
        }
        
    /**
         * 使用Vector
         
    */
        
    public static void testVector(){
            List list 
    = new Vector();
            init(list);
            System.out.println(
    "使用Vector: ");
            output(list);
        }
        
    /**
         * 使用LinkedList
         
    */
        
    public static void testLinkedList(){
            List list 
    = new LinkedList();
            init(list);
            System.out.println(
    "使用LinkedList: ");
            output(list);
        }
        
        
    public static void main(String[] args) {
            TestList.testArrayList();
            TestList.testVector();
            TestList.testLinkedList();
            
            List list 
    = new ArrayList();
            init(list);
            
    //List支持元素重復
            list.add("aaa");
            list.add(
    "bbb");
            System.out.println(
    "插入元素aaa, bbb后:");
            output(list);
            
    //指定元素插入的位置
            list.add(1"fff");
            System.out.println(
    "在下標為1處插入fff后:");
            output(list);
            List list2 
    = new ArrayList();
            list2.add(
    "ggg");
            list2.add(
    "hhh");
            
    //將另一列表中的元素插入到列表中
            list.addAll(list2);
            System.out.println(
    "添加list2的元素后:");
            output(list);

            
    //判斷列表是否包含某一元素
            
    //通過元素的equals方法,判斷元素是否相等
            System.out.println("list包含aaa? " + list.contains("aaa"));
            
    //判斷列表中是否包含了另外一個列表中的所有元素。
            System.out.println("list包含list2中的所有元素? " + list.containsAll(list2));
            
    //定位一個元素在列表中最先出現的位置
            System.out.println("aaa在list中第一次出現的位置: " + list.indexOf("aaa"));
            
    //定位一個元素在列表中最后出現的位置
            System.out.println("aaa在list中最后一次出現的位置: " + list.lastIndexOf("aaa"));
            
            
    //更新列表中某個位置的元素值
            list.set(2"xxx");
            System.out.println(
    "更新位置為2的元素為xxx后:");
            output(list);
            
    //刪除列表中的某個元素,只刪除第一次出現的那個
            list.remove("aaa");
            System.out.println(
    "刪除元素aaa后:");
            output(list);
            
    //刪除列表中指定位置的元素
            list.remove(1);
            System.out.println(
    "刪除下標為1的元素后:");
            output(list);
            
    //刪除列表中的其他元素,只保留另一個列表中包含的元素
            list.retainAll(list2);
            System.out.println(
    "刪除除list2包含的以外的元素后:");
            output(list);
            
    //刪除列表中在另一列表中也包含了的元素
            list.removeAll(list2);
            System.out.println(
    "刪除list2包含的元素后:");
            output(list);
            
            
    //清空列表
            list.clear();
            
    //判斷列表中是否有數據
            System.out.println("清空List后,list為空么?  " + list.isEmpty());
            init(list);
            
    //用列表中的某些元素構造一個新的列表
            list2 = list.subList(1,3);
            System.out.println(
    "用list的第1個到第3個元素構造一個新的List:");
            output(list2);
            
            
    //用List特有的遍歷器ListIterator遍歷列表
            
    //與普通的Iterator不用,它允許兩個方向遍歷列表
            ListIterator listIt = list.listIterator();
            System.out.println(
    "正向遍歷列表");
            
    while (listIt.hasNext()){
                System.out.print(listIt.next());
            } 
            System.out.println();
            System.out.println(
    "反向遍歷列表");
            
    while (listIt.hasPrevious()){
                System.out.print(listIt.previous());
            } 
            System.out.println();
            
    //也可以使用ListIterator從List中間插入和刪除元素,
            
    //只能在遍歷器當前位置添加和刪除。
            listIt.add("newadd");
            System.out.println(
    "用ListIterator往列表中添加元素newadd后: ");
            output(list);
            listIt.next();
            listIt.remove();
            System.out.println(
    "用ListIterator刪除列表中元素后: ");
            output(list);

            
    //LinkedList自定義的方法
            LinkedList linklist = new LinkedList();
            init(linklist);
            
    //添加元素到列表頭
            linklist.addFirst("fff");
            System.out.println(
    "把fff放到列表頭后:");
            output(linklist);
            
    //添加元素到列表尾
            linklist.addLast("eee");
            System.out.println(
    "把eee放到列表尾后:");
            output(linklist);
            
    //獲取表頭元素
            System.out.println("列表頭元素:" + linklist.getFirst());
            
    //獲取表尾元素
            System.out.println("列表尾元素:" + linklist.getLast());
            
    //刪除列表頭的元素
            linklist.removeFirst();
            System.out.println(
    "刪除列表頭元素后:");
            output(linklist);
            
    //刪除列表尾的元素
            linklist.removeLast();
            System.out.println(
    "刪除列表尾元素后:");
            output(linklist);
            
            
    //堆棧Stack類,它繼承自Stack類
            Stack myStack =  new Stack();
            
    //插入元素,是插入到尾部
            myStack.push("aaa");
            myStack.push(
    "bbb");
            myStack.push(
    "ccc");
            myStack.push(
    "ddd");
            myStack.push(
    "aaa");
            myStack.push(
    "ddd");
            System.out.println(
    "堆棧中的元素是: ");
            output(myStack);
            System.out.println(
    "堆棧尾部元素: " + myStack.peek());
            System.out.println(
    "彈出堆棧尾部元素: " + myStack.pop());
            
            
    /**
             * (1)ArrayList是最常用的List實現類,內部是通過數組實現的,它允許對元素進行快速隨機訪問。數組的缺點是每個元素之間不能含有“空隙”。
             * 當數組大小不滿足時會增加存儲能力,將已有數組數據復制到新的存儲空間中。當從ArrayList的中間位置插入或者刪除元素時,需要對數組進行拷貝,移動,代價比較高。因此,它適合隨即查找和遍歷,不適合插入合刪除。
             * (2)Vector與ArrayList一樣,也是通過數組實現的。不同的是它支持線程的同步,
             * 即一時刻只有一個線程能夠寫Vector,避免多線程同時寫引起的不一致性。但實現同步需要很高的花費,
             * 因此,訪問它比訪問ArrayList慢。
             * (3)LinkedList是用鏈表結構存儲數據的,很適合數據的動態插入和刪除,隨即訪問和遍歷速度比較慢。另外,它還提供了List沒有定義的方法,專門用于操作表頭和表尾元素,可以當作堆棧、隊列和雙向隊列使用。
             * (4)因為ArrayList和Vector都是用數組實現的,所以,在添加和插入時,最好從表尾操作,而不要從中間或者表頭開始,以避免數組移動引起的開銷!
             * (5)可以為每個List生成ListIterator,支持雙向遍歷List,而且能夠在ListIterator位置插入和刪除元素。
             * (6)堆棧類繼承Vector,它總是對列表的尾部數據進行操作,采用了先進后出的策略,自定義了插入、查看和彈出元素三個方法。
             
    */
        }
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 人妻丰满熟妇无码区免费| 四虎影视大全免费入口| 亚洲精品第一综合99久久| 国产片免费福利片永久| 最新久久免费视频| 亚洲youjizz| 国产亚洲成归v人片在线观看 | 久久精品无码专区免费| 亚洲精品视频在线观看视频| 亚洲一区免费观看| 欧美a级成人网站免费| 久久久久女教师免费一区| 亚洲制服丝袜精品久久| 亚洲欧洲一区二区三区| 黄页网站免费观看| 国产黄在线播放免费观看| 亚洲偷自精品三十六区| 亚洲熟妇中文字幕五十中出| 最近中文字幕免费mv视频7| 日韩av无码免费播放| 久久精品国产亚洲av瑜伽| 亚洲国产一区二区三区青草影视| 国产美女做a免费视频软件| 99re在线视频免费观看| av成人免费电影| 亚洲日本一线产区和二线产区对比| 亚洲av一综合av一区| 亚洲国产精品专区在线观看| 99热在线精品免费全部my| 成全视频免费观看在线看| 国产av无码专区亚洲av毛片搜| 亚洲国色天香视频| 亚洲AV日韩AV永久无码下载| 亚洲午夜成人精品电影在线观看| 天堂在线免费观看中文版| 免费v片在线观看视频网站| 人妻在线日韩免费视频| 免费人成网站永久| 国产亚洲视频在线观看| 亚洲中文字幕久久精品无码VA | 中国一级毛片视频免费看|