<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

    HashSet、LinkedHashSet和TreeSet

    Posted on 2009-05-31 00:03 啥都寫點(diǎn) 閱讀(1688) 評(píng)論(0)  編輯  收藏 所屬分類: J2SE
    關(guān)鍵技術(shù):
    • HashSet采用散列函數(shù)對(duì)元素進(jìn)行排序,是專門為快速查詢而設(shè)計(jì)的。存入HashSet的對(duì)象必須定義hashCode方法。
    • TreeSet采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序元素,使用它可以從Set中提取有序(升序或者降序)的序列。需要注意的是,存入自定義類時(shí),TreeSet需要維護(hù)元素的存儲(chǔ)順序,因此自定義類要實(shí)現(xiàn)Comparable接口并定義compareTo方法。
    • LinkedHashSet內(nèi)部使用散列以加快查詢速度,同時(shí)使用鏈表維護(hù)元素插入的次序,在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。

    package book.arrayset;

    import java.util.ArrayList;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.LinkedHashSet;
    import java.util.List;
    import java.util.Set;
    import java.util.TreeSet;

    /**
     * 演示各種Set的使用
     * 存入Set的每個(gè)元素必須是唯一的,因?yàn)镾et不保存重復(fù)元素。
     
    */
    public class TestSet {

        
    /**
         * 初始化Set的元素
         * 
    @param set
         
    */
        
    public static void init(Set set){
            
    if (set != null){
                set.add(
    "aaa");
                set.add(
    "ccc");
                set.add(
    "bbb");
                set.add(
    "eee");
                set.add(
    "ddd");
            }
        }
        
    /**
         * 輸出set的元素
         * 
    @param set
         
    */
        
    public static void output(Set set){
            
    if (set != null){
                
    //使用迭代器遍歷Set,也只有這一種方法
                Iterator it = set.iterator();
                
    while (it.hasNext()){
                    System.out.print(it.next() 
    + " ");
                }
            }
            System.out.println();
        }
        
    /**
         * 使用HashSet
         
    */
        
    public static void testHashSet(){
            Set mySet 
    = new HashSet();
            init(mySet);
            System.out.println(
    "使用HashSet: ");
            output(mySet);
        }
        
    /**
         * 使用TreeSet
         
    */
        
    public static void testTreeSet(){
            Set mySet 
    = new TreeSet();
            init(mySet);
            System.out.println(
    "使用TreeSet: ");
            output(mySet);
        }
        
    /**
         * 使用LinkedHashSet
         
    */
        
    public static void testLinkedHashSet(){
            Set mySet 
    = new LinkedHashSet();
            init(mySet);
            System.out.println(
    "使用LinkedHashSet: ");
            output(mySet);
        }
        
    public static void main(String[] args) {
            TestSet.testHashSet();
            TestSet.testTreeSet();
            TestSet.testLinkedHashSet();
            
            Set mySet 
    = new HashSet();
            init(mySet);
            
    //Set不允許元素重復(fù)
            mySet.add("aaa");
            mySet.add(
    "bbb");
            System.out.println(
    "為mySet加入aaa, bbb元素后: ");
            output(mySet);
            
    //刪除元素
            mySet.remove("aaa");
            System.out.println(
    "mySet刪除aaa元素后: ");
            output(mySet);
            
    //增加另外一個(gè)集合中的所有元素
            List list = new ArrayList();
            list.add(
    "aaa");
            list.add(
    "aaa");
            list.add(
    "fff");
            mySet.addAll(list);
            System.out.println(
    "mySet添加另外一個(gè)集合的所有元素后: ");
            output(mySet);
            
    //刪除除了另外一個(gè)集合包含的以外的所有元素
            mySet.retainAll(list);
            System.out.println(
    "mySet刪除除了另外一個(gè)集合包含的以外的所有元素后: ");
            output(mySet);
            
    //刪除另外一個(gè)集合包含的所有元素
            mySet.removeAll(list);
            System.out.println(
    "mySet刪除另外一個(gè)集合包含的所有元素后: ");
            output(mySet);
            
    //獲取Set中元素的個(gè)數(shù)
            System.out.println("mySet中當(dāng)前元素的個(gè)數(shù): " + mySet.size());
            
    //判斷Set中元素個(gè)數(shù)是否為0
            System.out.println("mySet中當(dāng)前元素為0?  " + mySet.isEmpty());
            
            
    /**
             * (1)Set不允許重復(fù)元素,因此加入Set的Object必須定義equals()方法以確保對(duì)象的唯一性。
             * (2)HashSet采用散列函數(shù)對(duì)元素進(jìn)行排序,是專門為快速查詢而設(shè)計(jì)的。存入HashSet的對(duì)象必須定義hashCode()。
             * (3)TreeSet采用紅黑樹(shù)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行排序元素,能保證元素的次序,使用它可以從Set中提取有序的序列。
             * 需要注意的是,生成自己的類時(shí),Set需要維護(hù)元素的存儲(chǔ)順序,因此要實(shí)現(xiàn)Comparable接口并定義compareTo()方法。
             * (4)LinkedHashSet內(nèi)部使用散列以加快查詢速度,同時(shí)使用鏈表維護(hù)元素的插入的次序,在使用迭代器遍歷Set時(shí),結(jié)果會(huì)按元素插入的次序顯示。
         
    */
        }
    }


                                                                                                           --    學(xué)海無(wú)涯
            

    主站蜘蛛池模板: 亚洲精品资源在线| 亚洲av中文无码字幕色不卡| 91嫩草免费国产永久入口| www.亚洲日本| 亚洲精品无码你懂的网站| 亚洲va无码va在线va天堂| 国产高清免费视频| 亚洲免费视频一区二区三区| 91亚洲国产成人精品下载| 91制片厂制作传媒免费版樱花| 亚洲国产精品无码第一区二区三区 | 99亚偷拍自图区亚洲| 亚洲国产激情一区二区三区| 深夜福利在线免费观看| 亚洲网站免费观看| 亚洲毛片网址在线观看中文字幕| 啦啦啦完整版免费视频在线观看 | 中文字幕av无码无卡免费| 一级做a爰性色毛片免费| 亚洲视频一区二区三区| 亚洲AV无码一区二三区 | 国内自产少妇自拍区免费| 亚洲色大情网站www| 亚洲色图在线观看| 亚洲欧洲国产成人综合在线观看| 皇色在线视频免费网站| 拍拍拍无挡视频免费观看1000| 午夜亚洲国产理论秋霞| 全部免费国产潢色一级| 91香蕉成人免费网站| 野花香高清在线观看视频播放免费| 亚洲第一街区偷拍街拍| 亚洲综合在线成人一区| 亚洲午夜无码久久久久| 免费人成网站7777视频| 欧美三级在线电影免费| 99久久久国产精品免费蜜臀| 成在线人免费无码高潮喷水| 黄网站色视频免费观看45分钟| 亚洲国产第一站精品蜜芽| 四虎永久免费地址在线网站|