<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,它總是對列表的尾部數據進行操作,采用了先進后出的策略,自定義了插入、查看和彈出元素三個方法。
             
    */
        }
    }



                                                                                                           --    學海無涯
            

    主站蜘蛛池模板: 四虎影视久久久免费观看| 亚洲国产成人精品无码区在线秒播| 精品亚洲成A人在线观看青青| 一个人看的www在线观看免费| 亚洲黄色免费在线观看| 99爱在线精品视频免费观看9| 亚洲AV日韩AV永久无码久久 | 最近中文字幕mv免费高清电影| 亚洲av日韩av无码av| 四虎永久在线精品免费网址 | 亚洲一级特黄大片在线观看| 日产久久强奸免费的看| 亚洲第一区在线观看| 亚洲精品视频免费| 亚洲成a人片在线观看日本| 免费无码一区二区三区| 亚洲人色大成年网站在线观看| 最近中文字幕无吗免费高清| 国产亚洲福利一区二区免费看| 免费人成在线观看播放国产| 一级毛片无遮挡免费全部| 久久久久亚洲av无码尤物| 亚洲免费一级视频| 亚洲av中文无码字幕色不卡| 亚洲午夜精品久久久久久浪潮| 十八禁在线观看视频播放免费| 亚洲男人的天堂在线| 国产精品免费视频一区| 国内精品免费久久影院| 亚洲成年人电影在线观看| 日韩精品免费一区二区三区| 丰满少妇作爱视频免费观看| 亚洲美女视频一区二区三区| 成人au免费视频影院| a级毛片毛片免费观看久潮| 亚洲一卡二卡三卡| 国产亚洲精品久久久久秋霞 | 亚洲第一成人影院| 59pao成国产成视频永久免费| 亚洲av无码片vr一区二区三区 | 无码国产精品一区二区免费式芒果|