三种Set的实现
TreeSet,HashSet, LinkedHashSet的实现都是基于三种TreeMap,HashMap,LinkedHashMap,所它们的遍历器实现是基于这种三种map的遍历器
遍历的特点
TreeSet通过红黑树实现的,是有序的
HashSet通过数组,链表,红黑树,因为hash值计算和hash处理函数导致,数组中的元素是无序的
LinkedHashSet是根据LinkedHashMap实现,用一个双向链表实现的,默认是按照插入顺序访问的。
代码测试
package com.java.javabase.map;
import lombok.extern.slf4j.Slf4j;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.TreeSet;
@Slf4j
public class SetTest {
public static void main(String[] args) {
HashSet hashset = new HashSet();
initSet(hashset);
setIterator(hashset, "test Hash set:");
TreeSet treeSet = new TreeSet();
initSet(treeSet);
setIterator(treeSet, "test TreeSet");
setIterator(treeSet.subSet("7", "99"), "test TreeSet sub");
LinkedHashSet linkedHashSet = new LinkedHashSet();
initSet(linkedHashSet);
setIterator(linkedHashSet, "test LinkedHashSet");
}
private static void initSet(Set set) {
set.add("7");
set.add("9");
set.add("1");
set.add("10");
}
private static void setIterator(Set set, String logdesc) {
log.info(logdesc);
Iterator it = set.iterator();
while (it.hasNext()) {
log.info("set value {}", it.next());
}
}
}
测试结果
D:\zxems\work\OpenJdk\8\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\lib\idea_rt.jar=55874:D:\Program Files\JetBrains\IntelliJ IDEA 2019.1.1\bin" -Dfile.encoding=GB2312 -classpath D:\zxems\work\OpenJdk\8\jre\lib\charsets.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\access-bridge-64.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\cldrdata.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\dnsns.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\jaccess.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\localedata.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\nashorn.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunec.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunjce_provider.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunmscapi.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\sunpkcs11.jar;D:\zxems\work\OpenJdk\8\jre\lib\ext\zipfs.jar;D:\zxems\work\OpenJdk\8\jre\lib\jce.jar;D:\zxems\work\OpenJdk\8\jre\lib\jsse.jar;D:\zxems\work\OpenJdk\8\jre\lib\management-agent.jar;D:\zxems\work\OpenJdk\8\jre\lib\resources.jar;D:\zxems\work\OpenJdk\8\jre\lib\rt.jar;D:\My\code\javalearn\java-learn\target\classes;D:\My\tools\maven\repo\org\slf4j\slf4j-log4j12\1.7.2\slf4j-log4j12-1.7.2.jar;D:\My\tools\maven\repo\org\slf4j\slf4j-api\1.7.2\slf4j-api-1.7.2.jar;D:\My\tools\maven\repo\log4j\log4j\1.2.17\log4j-1.2.17.jar com.java.javabase.map.SetTest
2019-07-22 19:28:52,732 [main] INFO SetTest - test Hash set:
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 1
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 7
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 9
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 10
2019-07-22 19:28:52,747 [main] INFO SetTest - test TreeSet
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 1
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 10
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 7
2019-07-22 19:28:52,747 [main] INFO SetTest - set value 9
2019-07-22 19:28:52,747 [main] INFO SetTest - test TreeSet sub
2019-07-22 19:28:52,857 [main] INFO SetTest - set value 7
2019-07-22 19:28:52,857 [main] INFO SetTest - set value 9
2019-07-22 19:28:52,857 [main] INFO SetTest - test LinkedHashSet
2019-07-22 19:28:52,857 [main] INFO SetTest - set value 7
2019-07-22 19:28:52,857 [main] INFO SetTest - set value 9
2019-07-22 19:28:52,857 [main] INFO SetTest - set value 1
2019-07-22 19:28:52,857 [main] INFO SetTest - set value 10
Process finished with exit code 0