循环结果添加到集合_Java Note-数据结构(4)集合
生活随笔
收集整理的這篇文章主要介紹了
循环结果添加到集合_Java Note-数据结构(4)集合
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
集合Set
- 確定性:對任何對象都能判定其是否屬于某一個集合;
- 互異性:集合內每個元素都是不相同的,內容互異;
- 無序性:集合內的順序無關;
Java中的集合接口Set
- HashSet(基于散列函數的集合,無序,不支持同步)
- TreeSet(基于樹結構的集合,可排序的,不支持同步)
- LinkedHashSet(基于散列函數和雙向鏈表的集合,可排序的,不支持同步)
HashSet
- 基于HashMap實現的,可以容納null元素,不支持同步
- Set s=Collections.synchronizedSet(new HashSet(...));
- add 添加一個元素
- clear 清除整個HashSet
- contains 判定是否包含一個元素
- remove 刪除一個元素
- size 大小
- retainsAll 計算兩個集合交集
測試結果
6 7 7 ============for循環遍歷============== null 40000 3 20 6 1000 5000000 ============測試集合交集============== 交集是 [c] ============測試多種遍歷方法速度============== ============迭代器遍歷============== 59033300納秒 ============for-each遍歷============== 96651700納秒- 對集合進行元素重復添加無效
- 遍歷的輸出順序與元素添加順序無關
- 迭代器遍歷效率更高
LinkedHashSet
- 繼承HashSet,也是基于HashMap實現的,可以容納null元素
- 不支持同步
- Set s = Collection.synchronizedSet(New LinkedHashSet(...));
- 方法和HashSet基本一致
- add,clear,contains,remove,size
- 通過一個雙向鏈表維護插入順序
測試結果
6 7 7 ============for循環遍歷============== null 1000 20 3 40000 5000000 6 ============迭代器遍歷============== 12353400納秒 ============for-each遍歷============== 9365600納秒- 遍歷結果和插入順序一致
- for-each遍歷更快
TreeSet
- 基于TreeMap實現,不可以容納null元素,不支持同步
- SortedSet s=Collections.synchronizedSortedSet(new TreeSet(...));//變成同步
- add 添加一個元素
- clear清除整個TreeSet
- contains判斷是否包含一個元素
- remove刪除一個元素
- size大小
- 根據compareTo方法或指定Comparator排序
輸出結果:
5 6 6 ============for循環遍歷============== 3 6 20 1000 40000 5000000 ============迭代器遍歷============== 8987700納秒 ============for-each遍歷============== 6676000納秒TreeSet按照所存儲對象大小升序輸出的
元素重復的判定
- HashSet,LinkedHashSet,TreeSet的元素都只能是對象;
- HashSet和LinkedHashSet判定元素是否重復原則:
- 判定兩個元素hashCode返回值是否相同,若不同,返回false;
- 若兩者hashCode相同,判定equals方法,若不同,返回false;否則,返回true;
- hashCode和equals方法是所有類都有的,因為Object類有
- TreeSet判定元素重復的原則
- 需要元素繼承自Comparable接口
- 比較兩個元素的compareTo方法
HashSet和LinkedHashSet例程:
Cat.java
classDog.java
classTiger.java
publicObjectHashSetTest
import輸出:
5 6 6 ============for循環遍歷============== 3 6 20 1000 40000 5000000 ============迭代器遍歷============== 8987700納秒 ============for-each遍歷============== 6676000納秒 PS C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo> cd 'c:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo'; & 'C:Userszhang.vscodeextensionsvscjava.vscode-java-debug-0.25.1scriptslauncher.bat' 'C:Program FilesJavajdk-12.0.2binjava.exe' '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:8842' '-Dfile.encoding=UTF-8' '-cp' 'C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemobin' 'HashSetJudgeRuleTest' 4 PS C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo> cd 'c:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemo'; & 'C:Userszhang.vscodeextensionsvscjava.vscode-java-debug-0.25.1scriptslauncher.bat' 'C:Program FilesJavajdk-12.0.2binjava.exe' '-agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:8863' '-Dfile.encoding=UTF-8' '-cp' 'C:UserszhangDocumentsVS CodeJavaJavaCoreTechniqueSetDemobin' 'ObjectHashSetTest' ==========Cat HashSet ============== 6 ======================== 6 ==========Dog HashSet ============== Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog equals()~~~~~~~~~~~ 5 ======================== Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog hashCode()~~~~~~~~~~~ Dog equals()~~~~~~~~~~~ 5 ==========Tiger HashSet ============== 6 ======================== 6這三個方法三位一體:
- equals()是相同的
- hashCode()是相同的
- toString()也應該是相同的
TreeSet例程
import結果
==========Tiger TreeSet ============== Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ Tiger compareTo()~~~~~~~~~~~ 5總結
以上是生活随笔為你收集整理的循环结果添加到集合_Java Note-数据结构(4)集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 技嘉主板后缀代表什么含义技嘉主板后面的字
- 下一篇: 直播需要准备什么直播需要准备什么设备