• <tfoot id="ukgsw"><input id="ukgsw"></input></tfoot>
    
    • 久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
      分享

      Java中Set接口及其實現

       閑來看看 2012-04-10

      Java中Set接口及其實現 Set接口及其實現
      1.Set接口
        Set是對數學上集的抽象,Set中不包含重復的元素.如何界定是否是重復元素?Set最多可含一個null元素;對于任意的非null元素e1和e2,都滿足e1.equals(e2)==false.
        Object.hashcode()的約定:
      a.在程序的一次執行中,無論何時在同一個java對象上重復調用hashcode(),都必須一致地返回同一個整數值,并不像Object.equals()那樣提供Object是否被修改了的信息,但這個整數值不必在同一個應用程序的多次運行之間保持一致.
      b.如果兩個Object通過equals()判斷是相等的,那么,在這兩個Object上調用hashcode()必返回相同的值.
      c.如果兩個Object通過equals()判斷是不相等的,那么,并不要求這兩個Object.hashcode()返回不同的整數值.
        集合操作:
         并         s1.addAll()原
         交         s1.retainAll(s2)原
        非對稱差    s1.remove(s2)
        對稱差      Set symmetricDiff = new HashSet(s1);
                    symmertricDiff.add(s2);
                    Set tmp = new HashSet(s1);
                    tmp.retainAll(s2);
                    symmertricDiff.removeAll(tmp);
                    則,symmertricDiff即為s1和s2的對稱差.
        相對補      Set relativeCompl = new HashSet(s1);
                    Set tmp = new HashSet(s1);
                    tmp.retainAll(s2);
                    relativeCompl.removeAll(tmp);
                    則,relativeCompl稱為s2的相對補. 
      2.Set實現
        HashSet是使用一個哈希表存儲元素的,是非排序的,可以隨機訪問,是Set的最優性能實現.TreeSet實現了SortedSet接口,使用一個紅黑樹來存儲元素,提供了元素的有序存儲和訪問.
        2.1 HashSet
        HashSet在底層實現上依賴于HashMap.
          HashSet的代碼片斷:
        // Dummy value to associate with an Object in the backing Map
          private static final Object PRESENT = new Object();

          public HashSet() {
       map = new HashMap<E,Object>();
          }

          public boolean add(E o) {
       return map.put(o, PRESENT)==null;
          }

          public boolean remove(Object o) {
       return map.remove(o)==PRESENT;
          }

          public boolean contains(Object o) {
             return map.containsKey(o);
          }
      從代碼可見,HashSet在底層借用HashMap,使用一個Object類型的啞元值作為HashSet中元素在底層HashMap存儲中的映射值.它抓住了HashMap的鍵不允許重復的特性.對于add()中調用底層映射的put(),將欲添加的元素和一個PRESENT啞元值放入底層map.如果底層Map返回null,說明原來的集合中并不存在該鍵.對于Map接口的put()返回null時有兩種解釋,一是原來的Map中不包含該鍵;另一種可能是原來的Map中已經存儲了該健,但該鍵映射到null.而在HashSet中的add()和remove()等中的返回null只有一種解釋,即原來的集合不包含該元素.這是因為HashSet的底層的映射中存儲的都是一個名為PRESENT的Object類型的對象,不可能是null.
       
        2.2 TreeSet
         Set接口有一個子接口:SortedSet,提供了集合元素的順序存儲,其中元素保持升序排列.為了在加入一個元素到SortedSet實現時能對這些元素排序,元素類型必須實現Comarable接口,或者建立SortedSet時使用Comparator.否則程序在運行時將拋出ClassCastException.
      3.使用Set的注意事項
        如果Set中存儲了可變對象,當這些對象出現重復元素,從而從根本上違反了Set的約定,Set的行為也變得不確定.所以,在Set中存儲可變對象時,一定要十分小心.同樣,對于Map中的key也一樣,因為Map中的key也是不允許重復的.
          //DupEleSet.java
        class DupEleSet{
         public static void main(String [] args)
         {
              Calendar cld=new Calendar.getInstance();
             cld.set(2003,0,1);

              Date d1 = cld.getTime();

              cld.set(2005,10,2);
             Date d2 = cld.getTime();

               Set s = new HashSet();
                s.add(d1);
                s.add(d2);

                System.out.println("before modify:"+s);

                d1.setTime(d2.getTime());

                  System.out.println("after modified:"+s);

              }
           }
      上面的程序輸出:
        before modify:[Wed Jan 01 21:54:19 cst 2003,Thu Nov 02 21:54:19 cst 2000]
        after modifyied:[Wed Jan 01 21:54:19 cst 2000,Thu Nov 02 21:54:19 cst 2000]

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發表

        請遵守用戶 評論公約

        類似文章 更多

        主站蜘蛛池模板: 日日噜噜夜夜狠狠视频| 又色又污又爽又黄的网站| 最新中文乱码字字幕在线| 亚洲男女一区二区三区| 性奴sm虐辱暴力视频网站| 男女18禁啪啪无遮挡激烈| 久久人人爽人人人人片AV| 99久久婷婷国产综合精品青草漫画 | 久久天堂综合亚洲伊人HD妓女 | 精品国产一区AV天美传媒| 国产乱啊有帅gv小太正| 中文字幕亚洲无线码A| 中国熟女仑乱hd| 亚洲ΑV久久久噜噜噜噜噜| 亚洲中文久久久精品无码| 亚洲WWW永久成人网站| 精品无码成人片一区二区| 色综合 图片区 小说区| 在线国产精品中文字幕| 国产在线精品一区二区夜色| 亚洲精品动漫免费二区| 婷婷综合久久中文字幕| 国产不卡精品视频男人的天堂| 亚洲精品爆乳一区二区H| 成人无码特黄特黄AV片在线| 少妇上班人妻精品偷人| 免费无码VA一区二区三区| 婷婷色香五月综合缴缴情香蕉| 无码国产精品一区二区高潮| 国产第一页浮力影院草草影视| 亚洲精品一区二区妖精| 亚洲人成无码网站18禁| 久久99精品久久水蜜桃| 久久一区二区中文字幕| 狠狠人妻久久久久久综合| 国产在线不卡精品网站| 福利一区二区在线观看| 久久婷婷五月综合尤物色国产| 人人爽人人模人人人爽人人爱| 加勒比无码人妻东京热| 国产精品中文字幕观看|