<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
    關(guān)鍵技術(shù):
    • ArrayList是最常用的List實現(xiàn)類,內(nèi)不是通過數(shù)組實現(xiàn)的,它允許對元素進行快速隨機訪問。數(shù)組的缺點是每個元素之間不能含有“空隙”,當(dāng)數(shù)組大小不滿足時需要增加存儲能力,就要將已有數(shù)組數(shù)據(jù)復(fù)制到新的存儲空間中。當(dāng)從ArrayList的中間位置插入或者刪除元素時,需要對數(shù)組進行復(fù)制、移動,代價比較高。因此,它適合隨機查找和遍歷,不適合插入和刪除。
    • Vector與ArrayList一樣,也是通過數(shù)組實現(xiàn)的,不同的是它支持線程的同步,即某一時刻只有一個線程能夠Vector,避免多線程同時寫而引起的不一致性,但實現(xiàn)同步需要很高的花費,因此,訪問它比訪問AarryList慢
    • LinkedList是用鏈表結(jié)構(gòu)存儲數(shù)據(jù)的,很適合數(shù)據(jù)的動態(tài)插入和刪除,隨機訪問和遍歷速度比較慢。另外,它還提供了List接口中沒有定義的方法,專門用于操作表頭和表尾元素,可以當(dāng)做堆棧、隊列和雙向隊列使用。

    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是能維護元素的次序,它允許元素重復(fù)
     
    */
    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的內(nèi)容
         * 
    @param list
         
    */
        
    public static void output(List list){
            
    if (list != null){
                
    //根據(jù)列表下標(biāo)遍歷,使用list.size()獲取列表中元素的個數(shù)
                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支持元素重復(fù)
            list.add("aaa");
            list.add(
    "bbb");
            System.out.println(
    "插入元素aaa, bbb后:");
            output(list);
            
    //指定元素插入的位置
            list.add(1"fff");
            System.out.println(
    "在下標(biāo)為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));
            
    //定位一個元素在列表中最先出現(xiàn)的位置
            System.out.println("aaa在list中第一次出現(xiàn)的位置: " + list.indexOf("aaa"));
            
    //定位一個元素在列表中最后出現(xiàn)的位置
            System.out.println("aaa在list中最后一次出現(xiàn)的位置: " + list.lastIndexOf("aaa"));
            
            
    //更新列表中某個位置的元素值
            list.set(2"xxx");
            System.out.println(
    "更新位置為2的元素為xxx后:");
            output(list);
            
    //刪除列表中的某個元素,只刪除第一次出現(xiàn)的那個
            list.remove("aaa");
            System.out.println(
    "刪除元素aaa后:");
            output(list);
            
    //刪除列表中指定位置的元素
            list.remove(1);
            System.out.println(
    "刪除下標(biāo)為1的元素后:");
            output(list);
            
    //刪除列表中的其他元素,只保留另一個列表中包含的元素
            list.retainAll(list2);
            System.out.println(
    "刪除除list2包含的以外的元素后:");
            output(list);
            
    //刪除列表中在另一列表中也包含了的元素
            list.removeAll(list2);
            System.out.println(
    "刪除list2包含的元素后:");
            output(list);
            
            
    //清空列表
            list.clear();
            
    //判斷列表中是否有數(shù)據(jù)
            System.out.println("清空List后,list為空么?  " + list.isEmpty());
            init(list);
            
    //用列表中的某些元素構(gòu)造一個新的列表
            list2 = list.subList(1,3);
            System.out.println(
    "用list的第1個到第3個元素構(gòu)造一個新的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中間插入和刪除元素,
            
    //只能在遍歷器當(dāng)前位置添加和刪除。
            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實現(xiàn)類,內(nèi)部是通過數(shù)組實現(xiàn)的,它允許對元素進行快速隨機訪問。數(shù)組的缺點是每個元素之間不能含有“空隙”。
             * 當(dāng)數(shù)組大小不滿足時會增加存儲能力,將已有數(shù)組數(shù)據(jù)復(fù)制到新的存儲空間中。當(dāng)從ArrayList的中間位置插入或者刪除元素時,需要對數(shù)組進行拷貝,移動,代價比較高。因此,它適合隨即查找和遍歷,不適合插入合刪除。
             * (2)Vector與ArrayList一樣,也是通過數(shù)組實現(xiàn)的。不同的是它支持線程的同步,
             * 即一時刻只有一個線程能夠?qū)慥ector,避免多線程同時寫引起的不一致性。但實現(xiàn)同步需要很高的花費,
             * 因此,訪問它比訪問ArrayList慢。
             * (3)LinkedList是用鏈表結(jié)構(gòu)存儲數(shù)據(jù)的,很適合數(shù)據(jù)的動態(tài)插入和刪除,隨即訪問和遍歷速度比較慢。另外,它還提供了List沒有定義的方法,專門用于操作表頭和表尾元素,可以當(dāng)作堆棧、隊列和雙向隊列使用。
             * (4)因為ArrayList和Vector都是用數(shù)組實現(xiàn)的,所以,在添加和插入時,最好從表尾操作,而不要從中間或者表頭開始,以避免數(shù)組移動引起的開銷!
             * (5)可以為每個List生成ListIterator,支持雙向遍歷List,而且能夠在ListIterator位置插入和刪除元素。
             * (6)堆棧類繼承Vector,它總是對列表的尾部數(shù)據(jù)進行操作,采用了先進后出的策略,自定義了插入、查看和彈出元素三個方法。
             
    */
        }
    }



                                                                                                           --    學(xué)海無涯
            

    主站蜘蛛池模板: 国产美女无遮挡免费网站| 亚洲午夜激情视频| 亚洲AV无码一区二区三区性色| 国产jizzjizz视频全部免费| caoporn成人免费公开| 亚洲欧洲精品视频在线观看| 日本黄色免费观看| 国产亚洲免费的视频看| 亚洲AV无码一区二区三区人| 一区国严二区亚洲三区| 一级毛片免费不卡在线| 亚洲国产成人久久精品大牛影视| 国产成人A亚洲精V品无码| 99精品国产免费久久久久久下载 | 久久精品国产亚洲77777| 成人爱做日本视频免费| 三年片在线观看免费观看大全动漫 | 日本一道一区二区免费看 | 日韩一级片免费观看| 亚洲精品亚洲人成在线麻豆| 四虎影视在线永久免费看黄| 永久在线免费观看| 精品国产免费人成网站| 色天使亚洲综合在线观看| 亚洲AV永久纯肉无码精品动漫| 日韩免费观看视频| 99久久免费国产香蕉麻豆 | 性xxxx视频播放免费| 暖暖免费日本在线中文| 边摸边吃奶边做爽免费视频网站| 久久精品国产精品亚洲毛片| 亚洲精品乱码久久久久久蜜桃| 99re热免费精品视频观看 | 国产伦精品一区二区免费| 亚洲中文字幕AV每天更新| 亚洲视频在线观看一区| 国产偷国产偷亚洲清高动态图| 国产色爽免费视频| 成年人免费视频观看| 在线人成精品免费视频| 久久免费观看国产99精品|