精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java集合框架總結:Set接口的使用

開發 后端
Set集合里多個對象之間沒有明顯的順序。具體詳細方法請參考API文檔(可見身邊隨時帶上API文檔有多重要),基本與Collection方法相同。只是行為不同(Set不允許包含重復元素)。

1、Set接口的使用

Set集合里多個對象之間沒有明顯的順序。具體詳細方法請參考API文檔(可見身邊隨時帶上API文檔有多重要),基本與Collection方法相同。只是行為不同(Set不允許包含重復元素)。

Set集合不允許重復元素,是因為Set判斷兩個對象相同不是使用==運算符,而是根據equals方法。即兩個對象用equals方法比較返回true,Set就不能接受兩個對象。

  1. public class TestSet  
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         Set<String> books = new HashSet<String>();  
  6.           
  7.         //添加一個字符串對象  
  8.         books.add(new String("Struts2權威指南"));  
  9.           
  10.         //再次添加一個字符串對象,  
  11.         //因為兩個字符串對象通過equals方法比較相等,所以添加失敗,返回false  
  12.         boolean result = books.add(new String("Struts2權威指南"));  
  13.           
  14.         System.out.println(result);  
  15.           
  16.         //下面輸出看到集合只有一個元素  
  17.         System.out.println(books);    
  18.     }  

程序運行結果:

  1. false  
  2. [Struts2權威指南] 

說明:程序中,book集合兩次添加的字符串對象明顯不是一個對象(程序通過new關鍵字來創建字符串對象),當使用==運算符判斷返回false,使用equals方法比較返回true,所以不能添加到Set集合中,最后只能輸出一個元素。

Set接口中的知識,同時也適用于HashSet、TreeSet和EnumSet三個實現類。

2、HashSet類

HashSet按Hash算法來存儲集合的元素,因此具有很好的存取和查找性能。

 HashSet的特點:

(1)HashSet不是同步的,多個線程訪問是需要通過代碼保證同步

(2)集合元素值可以使null。

HashSet集合判斷兩個元素相等的標準是兩個對象通過equals方法比較相等,并且兩個對象的hashCode()方法返回值也相等。

  1. //類A的equals方法總是返回true,但沒有重寫其hashCode()方法  
  2. class A  
  3. {  
  4.     public boolean equals(Object obj)  
  5.     {  
  6.         return true;  
  7.     }  
  8. }  
  9. //類B的hashCode()方法總是返回1,但沒有重寫其equals()方法  
  10. class B  
  11. {  
  12.     public int hashCode()  
  13.     {  
  14.         return 1;  
  15.     }  
  16. }  
  17. //類C的hashCode()方法總是返回2,但沒有重寫其equals()方法  
  18. class C  
  19. {  
  20.     public int hashCode()  
  21.     {  
  22.         return 2;  
  23.     }  
  24.     public boolean equals(Object obj)  
  25.     {  
  26.         return true;  
  27.     }  
  28. }  
  29. public class TestHashSet  
  30. {  
  31.     public static void main(String[] args)   
  32.     {  
  33.         HashSet<Object> books = new HashSet<Object>();  
  34.         //分別向books集合中添加2個A對象,2個B對象,2個C對象  
  35.         books.add(new A());  
  36.         books.add(new A());  
  37.         books.add(new B());  
  38.         books.add(new B());  
  39.         books.add(new C());  
  40.         books.add(new C());  
  41.         System.out.println(books);  
  42.     }  

程序運行結果:

  1. [B@1, B@1, C@2, A@b5dac4, A@9945ce] 

說明:

(1)Object類提供的toString方法總是返回該對象實現類的類名+@+hashCode(16進制數)值,所以可以看到上面程序輸出的結果。可以通過重寫toString方法來輸出自己希望的形式。

(2)即使2個A對象通過equals比較返回true,但HashSet依然把它們當成2個對象;即使2個B對象的hashCode()返回相同值,但HashSet依然把它們當成2個對象。即如果把一個對象放入HashSet中時,如果重寫該對象equals()方法,也應該重寫其hashCode()方法。其規則是:如果2個對象通過equals方法比較返回true時,這兩個對象的hashCode也應該相同。

 hash算法的功能:

它能保證通過一個對象快速查找到另一個對象。hash算法的價值在于速度,它可以保證查詢得到快速執行。

當需要查詢集合中某個元素時,hash算法可以直接根據該元素的值得到該元素保存位置,從而可以讓程序快速找到該元素。

當從HashSet中訪問元素時,HashSet先計算該元素的hashCode值(也就是調用該對象的hashCode())方法的返回值),然后直接到該hashCode對應的位置去取出該元素。

即也是快速的原因。HashSet中每個能存儲元素的“曹位(slot)”通常稱為“桶(bucket)”,如果多個元素的hashCode相同,但它們通過equals()方法比較返回false,就需要一個“桶”里放多個元素,從而導致性能下降。

繼續深入研究HashSet:

當向HashSet中添加一個可變對象后,并且后面程序修改了該可變對象的屬性,可能導致它與集合中其他元素相同,這就可能導致HashSet中包含兩個相同的對象。

看下面程序:

  1. class R  
  2. {  
  3.     int count;  
  4.     public R(int count)  
  5.     {  
  6.         this.count = count;  
  7.     }  
  8.     public String toString()  
  9.     {  
  10.         return "R(count屬性:" + count + ")";  
  11.     }  
  12.     public boolean equals(Object obj)  
  13.     {  
  14.         if (obj instanceof R)  
  15.         {  
  16.             R r = (R)obj;  
  17.             if (r.count == this.count)  
  18.             {  
  19.                 return true;  
  20.             }  
  21.         }  
  22.         return false;  
  23.     }  
  24.     public int hashCode()  
  25.     {  
  26.         return this.count;  
  27.     }  
  28. }  
  29. public class TestHashSet2  
  30. {  
  31.     public static void main(String[] args)   
  32.     {  
  33.         HashSet<R> hs = new HashSet<R>();  
  34.         hs.add(new R(5));  
  35.         hs.add(new R(-3));  
  36.         hs.add(new R(9));  
  37.         hs.add(new R(-2));  
  38.         //打印TreeSet集合,集合元素是有序排列的  
  39.         System.out.println(hs);  
  40.         //取出第一個元素  
  41.         Iterator<R> it = hs.iterator();  
  42.         R first = (R)it.next();     //first指向集合的第一個元素  
  43.         //為第一個元素的count屬性賦值  
  44.         first.count = -3;           //first指向的元素值發生改變,地址并沒有改變,大家可以試著用Java內存分配機制(棧和堆)思考下。  
  45.         //再次輸出count將看到HashSet里的元素處于無序狀態  
  46.         System.out.println(hs);  
  47.         hs.remove(new R(-3));  
  48.         System.out.println(hs);  
  49.         //輸出false  
  50.         System.out.println("hs是否包含count為-3的R對象?" + hs.contains(new R(-3)));  
  51.         //輸出false  
  52.         System.out.println("hs是否包含count為5的R對象?" + hs.contains(new R(5)));  
  53.  
  54.     }  

程序運行結果:

  1. [R(count屬性:5), R(count屬性:9), R(count屬性:-3), R(count屬性:-2)]  
  2. [R(count屬性:-3), R(count屬性:9), R(count屬性:-3), R(count屬性:-2)]  
  3. [R(count屬性:-3), R(count屬性:9), R(count屬性:-2)]  
  4. hs是否包含count為-3的R對象?false 
  5. hs是否包含count為5的R對象?false 

說明:程序重寫了R類的equals()和hashCode()方法,這兩個方法都是根據R對象的count屬性來判斷。從運行結果可以看出,HashSet集合中有完全相同元素,這表明兩個元素已經重復,但因為HashSet在添加它們時已經把它們添加到了不同地方,所以HashSet完全可以容納兩個相同元素。至于第一個count為-3的R對象,它保存在count為5的R對象對應的位置(地址)。當向HashSet中添加可變對象時,必須十分小心。如果修改HashSet集合中的對象,有可能導致該對象與集合中其他對象相等,從而導致HashSet無法準確訪問該對象。

HashSet還有一個子類LinkedHashSet,LinkedHashSet集合也根據元素hashCode值來決定元素存儲位置,但它同時使用鏈表維護元素的次序,即當遍歷LinkedHashSet集合元素時,HashSet將會按元素的添加順序來訪問集合里的元素。

3、TreeSet類

TreeSet是SortedSet接口的唯一實現,TreeSet可以確保集合元素處于排序狀態(元素是有序的)。

TreeSet提供的幾個額外方法:

  1. Comparator comparttor(): 返回當前Set使用的Compara投入,或者返回null,表示以自然方式排序。  
  2.  
  3. Object first():返回集合中的第一個元素。  
  4.  
  5. Object last():返回集合中的最后一個元素。  
  6.  
  7. Objiect lower(Object e):返回集合中位于指定元素之前的元素(即小于指定元素的最大元素,參考元素可以不是TreeSet的元素)。  
  8.  
  9. Object higher(Object e):返回集合中位于指定元素之后的元素(即大于指定元素的最小元素,參考元素可以不需要TreeSet的元素)。  
  10.  
  11. SortedSet subSet(fromElement, toElement):返回此Set的子集,范圍從fromElement(包含大于等于)到toElement(不包含小于)。  
  12.  
  13. SortedSet headSet(toElement):返回此Set的子集,由小于toElement的元素組成。  
  14.  
  15. SortedSet tailSet(fromElement):返回此Set的子集,由大于或等于fromElement的元素組成。 
  1. public class TestTreeSetCommon  
  2. {  
  3.     public static void main(String[] args)   
  4.     {  
  5.         TreeSet<Integer> nums = new TreeSet<Integer>();  
  6.         //向TreeSet中添加四個Integer對象  
  7.         nums.add(5);  
  8.         nums.add(2);  
  9.         nums.add(10);  
  10.         nums.add(-9);  
  11.         //輸出集合元素,看到集合元素已經處于排序狀態  
  12.         System.out.println(nums);  
  13.         //輸出集合里的第一個元素  
  14.         System.out.println(nums.first());  
  15.         //輸出集合里的最后一個元素  
  16.         System.out.println(nums.last());  
  17.         //返回小于4的子集,不包含4  
  18.         System.out.println(nums.headSet(4));  
  19.         //返回大于5的子集,如果Set中包含5,子集中還包含5  
  20.         System.out.println(nums.tailSet(5));  
  21.         //返回大于等于-3,小于4的子集。  
  22.         System.out.println(nums.subSet(-3 , 4));  
  23.     }  

說明:由運行結果可以看出,TreeSet并不是根據元素的插入順序進行排序,而是根據元素實際值來進行排序。TreeSet采用紅黑樹的數據結構對元素進行排序,具體排序內容會在后續文章中說明。

原文鏈接:http://www.cnblogs.com/zhxxcq/archive/2012/03/14/2395511.html

【編輯推薦】

  1. Java的位移運算巧方法
  2. Java7的一個新類JLayer:裝飾的Swing組件
  3. 關于Java中內存溢出的解決辦法
  4. Java中的面向對象特性
  5. 探究Java初始化的過程
責任編輯:林師授 來源: 星星傳奇的博客
相關推薦

2012-03-12 15:36:29

Java框架

2019-07-22 09:59:20

Java框架集合

2012-05-02 10:47:51

JavaJava集合框架

2021-04-12 07:34:03

Java集合框架

2015-09-11 09:40:35

Java集合框架

2011-04-14 09:30:15

集合框架

2011-07-11 11:02:12

JAVA集合框架

2012-04-26 10:52:52

Java數組集合

2009-06-29 16:50:27

Java集合框架

2023-10-09 07:57:14

JavaJCF

2021-03-11 07:27:22

Java 集合數據

2020-06-15 11:04:38

JavaScript 代碼JavaScript

2009-06-30 14:01:00

Java集合框架Java數組排序

2015-11-06 10:26:53

JavaExecutor框架

2015-12-24 10:13:29

JavaExecutor框架

2023-12-01 11:13:50

JavaTreeSet

2019-11-14 09:53:30

Set集合存儲

2010-06-11 17:10:02

Java框架開源

2015-09-11 09:17:55

JavaJava HashMa

2021-09-06 20:05:47

Python集合對象
點贊
收藏

51CTO技術棧公眾號

欧美一区二区不卡视频| 久久久久久久久久看片| 久久99久国产精品黄毛片入口| 中文字幕第66页| 大黄网站在线观看| 久久午夜国产精品| 国产一区二区在线播放| 国产在线综合网| 欧美日韩一二三四| 精品久久久久久无| 9久久婷婷国产综合精品性色| 午夜av在线免费观看| 久久久久综合网| 亚洲综合av影视| 伊人中文字幕在线观看| 午夜激情一区| 国产一区二区三区日韩欧美| 911亚洲精选| 国产香蕉久久| 日韩欧美国产一区二区| 一级特黄妇女高潮| 国产在线一二| 成人黄色av网站在线| 成人久久久久久| 日韩欧美在线观看免费| 这里只有精品在线| 最近2019中文字幕大全第二页| 中文字幕人妻无码系列第三区| 高清电影一区| 午夜精品在线看| 400部精品国偷自产在线观看| 国产黄在线播放| 97精品电影院| 国产精品久久久久久久久久直播| 中文字幕在线观看免费| 免费视频久久| 91精品国产一区| 国产一级aa大片毛片| 亚洲欧美综合国产精品一区| 精品国产视频在线| 国产大屁股喷水视频在线观看| 香蕉人人精品| 日韩电影大全免费观看2023年上| 麻豆tv在线观看| 日韩欧美久久| 日韩一区二区影院| 欧美精品色视频| 国产精品成人**免费视频| 欧美另类久久久品| 在线观看免费av网址| 久久免费影院| 欧美精品日韩一本| 国产成人精品视频ⅴa片软件竹菊| 深夜国产在线播放| 亚洲一区二区三区四区在线| 国产一级大片免费看| a在线免费观看| 一区二区三区四区蜜桃| 日韩国产小视频| www在线看| 欧美日韩精品二区| 青青青免费在线| 色是在线视频| 色香蕉成人二区免费| 青青青国产在线视频| 欧美成人app| 欧美日韩国产一二三| 欧美国产日韩另类| 伊人久久大香线蕉av超碰| 欧美成人女星排名| 中文成人无字幕乱码精品区| 亚州综合一区| 中文字幕精品在线| 国产suv精品一区二区68| 欧美日本久久| 91精品国产91| 国产精品欧美综合| 国产精品中文字幕日韩精品 | 国内精品不卡在线| 91久久极品少妇xxxxⅹ软件| 亚洲AV成人无码一二三区在线| xf在线a精品一区二区视频网站| 日韩欧美国产二区| 国产黄色在线观看| 精品日韩中文字幕| www.日本一区| 国产精品传媒| 一区二区三区在线播放欧美| caoporn91| 欧美中文日韩| 114国产精品久久免费观看| 少妇喷水在线观看| 国产精品久线在线观看| 国产二区视频在线| 欧美91在线|欧美| 亚洲成年人在线| 99在线视频免费| 激情欧美亚洲| 成人精品久久久| 天天爱天天干天天操| 国产精品高潮呻吟久久| 成年人观看网站| 欧美经典影片视频网站| 亚洲三级免费看| 久久久久香蕉视频| 麻豆国产一区二区| 免费99视频| 欧美性猛片xxxxx免费中国| 欧洲中文字幕精品| 精品影片一区二区入口| 香蕉国产精品| 国产999精品久久久| 国产 日韩 欧美 综合| 中文字幕中文乱码欧美一区二区| 国产91露脸中文字幕在线| 最新黄色网址在线观看| 91在线视频在线| 性生活免费观看视频| 国外成人福利视频| 亚洲片在线资源| 欧美成人aaaaⅴ片在线看| 久久精品免费观看| 日韩在线三级| 在线观看的黄色| 亚洲变态欧美另类捆绑| 内射一区二区三区| 九九在线精品视频| 手机在线观看国产精品| 国产精品扒开腿做爽爽爽视频软件| 日韩欧美成人一区| 少妇aaaaa| 久久99精品国产| 亚洲欧洲精品一区二区| 羞羞影院欧美| 国产亚洲精品一区二555| 欧美三级午夜理伦| caoporn国产一区二区| www插插插无码免费视频网站| 一区二区三区| 日韩视频免费在线| 一级特黄aaa大片| 中文字幕不卡三区| 欧美日韩亚洲自拍| 日韩激情免费| 国产精品热视频| 国产69精品久久app免费版| 色婷婷久久99综合精品jk白丝| 7788色淫网站小说| 亚洲一区国产一区| 鲁丝片一区二区三区| 日本不卡1234视频| 亚洲天堂av在线免费| 波多野结衣视频网址| 久久精品人人做人人爽97| 成人免费毛片播放| 成人写真视频| 成人性教育视频在线观看| 午夜伦全在线观看| 欧美一区二区在线视频| www青青草原| 丁香五精品蜜臀久久久久99网站| 妺妺窝人体色www看人体| 国产精品毛片久久久| 国语自产精品视频在线看抢先版图片| 亚洲精品成av人片天堂无码| 午夜在线成人av| www.av天天| 久久精品久久99精品久久| 国产对白在线播放| 一区二区三区四区精品视频| 午夜精品一区二区三区在线视| 五月婷婷久久久| 欧美在线小视频| 日韩欧美综合视频| 不卡的av在线播放| 五月婷婷六月丁香激情| 欧美日韩亚洲一区| 免费亚洲一区二区| 一区二区三区| 欧美在线不卡区| 拍真实国产伦偷精品| 精品免费日韩av| 黄色av网站免费| 亚洲精品一二三区| 深爱五月激情网| 精品亚洲国产成人av制服丝袜| 日本国产中文字幕| 国产成人三级| 2022国产精品| 欧美aaa视频| 欧美另类极品videosbest最新版本| 凸凹人妻人人澡人人添| 777午夜精品视频在线播放| 国产午夜视频在线播放| 自拍偷拍国产亚洲| 成年人免费观看视频网站| 激情综合色丁香一区二区| heyzo国产| 欧美成人一区二免费视频软件| 久久久久欧美| 日韩在线成人| 国产精品视频精品视频| 高清精品在线| 久热精品在线视频| 日韩一二三四| 日韩精品一区二区三区中文不卡| 波多野结衣影片| 婷婷国产v国产偷v亚洲高清| 国产尤物在线播放| 国产日韩精品一区二区三区| av免费观看不卡| 国产资源在线一区| 五月天亚洲视频| 亚洲女同同性videoxma| www.夜夜爱| 婷婷色综合网| 天堂av一区二区| 蜜桃精品wwwmitaows| 国产精品一区在线观看| 精品国产欧美| 91探花福利精品国产自产在线 | 亚洲午夜羞羞片| 影音先锋男人资源在线观看| 久久久青草青青国产亚洲免观| 久久精品无码专区| 国产乱子伦视频一区二区三区| 一区二区在线播放视频| 久久久久一区| 欧美精品99久久| 日韩视频在线一区二区三区 | 日本乱理伦在线| 久久成年人视频| 久草免费在线| 久久夜色精品国产亚洲aⅴ| 婷婷视频在线| 精品国产拍在线观看| 看女生喷水的网站在线观看| 色多多国产成人永久免费网站 | 欧美日韩大片免费观看| 国产伦精品一区二区三区视频孕妇| 精品国产亚洲一区二区三区在线| 国产欧美精品在线| 亚洲高清影院| 亚洲a中文字幕| 欧美日本三级| 99热99热| 国产丝袜一区| 久久久久久亚洲精品不卡4k岛国 | 国产91亚洲精品久久久| 国产精品久久久久久久久久久久久| 亚洲承认视频| 国产精品视频在线播放| 日韩专区视频| 99re国产| 日韩欧美国产大片| 清纯唯美一区二区三区| 青青草国产免费一区二区下载 | 国产精品多人| 国产av国片精品| 久久久久国产精品午夜一区| 毛片毛片毛片毛片毛片毛片毛片毛片毛片 | 国产亚洲精品久久久久久牛牛 | 中文字幕日本不卡| 亚洲国产精品免费在线观看| 亚洲午夜电影网| 国产香蕉视频在线| 91国偷自产一区二区开放时间 | 欧洲金发美女大战黑人| 亚洲国产电影| 美女一区二区三区视频| 国产美女娇喘av呻吟久久| 亚洲欧美日韩偷拍| 国产片一区二区三区| 神马午夜精品91| 午夜在线成人av| 最近国语视频在线观看免费播放| 91麻豆精品国产自产在线| 欧美特黄一级视频| 亚洲图片欧美日产| 26uuu亚洲电影在线观看| 777精品视频| 欧美a视频在线| 精品国产二区在线| 久久在线视频| 亚洲美免无码中文字幕在线| 青青国产91久久久久久| 韩国一区二区三区四区| 日本一二三四高清不卡| 久久精品www人人爽人人| 在线视频一区二区三| 99草在线视频| 国产亚洲精品美女| 999av小视频在线| 国产精品自产拍在线观看| 国产精品中文字幕制服诱惑| 一区二区三区欧美在线| 亚洲国产网站| 日本高清免费在线视频| 久久久精品影视| 国产在线一区视频| 51精品国自产在线| 国产乱子伦三级在线播放| 欧美精品激情视频| 成人短视频软件网站大全app| 麻豆av一区| 亚洲精品123区| 在线观看日本www| 亚洲国产精品激情在线观看| 日本天堂在线视频| 日韩一区二区免费在线观看| 国产毛片av在线| 日本精品免费观看| 国产精品极品国产中出| 热这里只有精品| 久久电影网电视剧免费观看| 国产交换配乱淫视频免费| 亚洲一线二线三线视频| 国产毛片毛片毛片毛片| 在线日韩中文字幕| 原纱央莉成人av片| 国产精品视频免费观看| 欧美日韩日本国产亚洲在线 | 91免费精品国自产拍在线不卡| 岛国毛片在线观看| 欧美一区二区三区人| 人人干在线视频| 国产精品人成电影在线观看| 精品一区二区三| 欧美一级黄色片视频| 91在线观看高清| 国产 欧美 日韩 在线| 亚洲经典中文字幕| 182在线视频观看| 精品国产乱码久久久久久88av| 国产精品大片| 女女调教被c哭捆绑喷水百合| 亚洲美女免费在线| av中文字幕播放| 欧美人交a欧美精品| 91精品短视频| 成年人看的毛片| youjizz国产精品| 日韩特黄一级片| 日韩av影片在线观看| 在线成人av观看| 欧美精品二区三区四区免费看视频| 先锋a资源在线看亚洲| 国产精品无码午夜福利| 色噜噜偷拍精品综合在线| 国产专区在线播放| 成人激情春色网| 亚洲精品tv久久久久久久久久| 激情成人在线观看| 亚洲国产美女搞黄色| 五十路在线视频| 国产97色在线|日韩| 手机在线一区二区三区| www.国产福利| 亚洲3atv精品一区二区三区| 偷拍自拍在线| 欧美在线视频一二三| 成人毛片在线| gogo亚洲国模私拍人体| 亚瑟在线精品视频| 国产小视频免费在线观看| 成人免费大片黄在线播放| 亚洲视频久久| 美女久久久久久久久久| 欧美巨大另类极品videosbest| 丝袜中文在线| 欧美亚洲爱爱另类综合| 激情图片小说一区| 国产精品久久久一区二区三区| av日韩精品| 亚洲少妇第一页| 亚洲人成影院在线观看| 色屁屁草草影院ccyycom| 日韩av毛片网| 亚洲h色精品| 欧美大片免费播放器| 欧美日韩精品综合在线| av电影院在线看| 五月婷婷一区| 粉嫩高潮美女一区二区三区| 日韩精品久久久久久免费| 美女视频黄免费的亚洲男人天堂| 农村少妇一区二区三区四区五区| 日韩爱爱小视频| 亚洲成人av电影| 欧美13一16娇小xxxx| 极品尤物一区二区三区| 国产一区在线观看麻豆| 中文字幕在线观看视频网站| 日韩一区二区精品视频| 日韩av影院| 手机av在线网站| 欧美日韩在线播放三区四区| www.综合| 红桃一区二区三区| 欧美激情在线看|