1 简介
- 无重复数据
- 无序(HashSet)
- 有序(LinkedHashSet)
2 HashSet
HashSet使用HashMap,因此无序。
public HashSet() {
map = new HashMap<>();
}
3 LinkedHashMap
有序,继承了LinkedHashMap,因此有序。
public LinkedHashSet() {
super(16, .75f, true);
}
继承的HashSet使用了LinkedHashMap,因此有序。
HashSet(int initialCapacity, float loadFactor, boolean dummy) {
map = new LinkedHashMap<>(initialCapacity, loadFactor);
}
3 测试
package datastructure;
import common.constant.StringConstant;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import sun.awt.image.ImageWatched;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
/**
* Set.
*
* @author xindaqi
* @since 2021/3/15 19:38
*/
public class SetTest {
private static final Logger logger = LogManager.getLogger(SetTest.class);
/**
* 向HashSet添加元素
*
* @param set set集合
*/
public static void addHashSet(Set<String> set) {
set.add("xiaoxiao");
set.add("xiaohua");
logger.info("{}添加元素后的HashSet: {}", StringConstant.LOG_PLACEHOLDER, set);
}
/**
* 向LinkedSet添加元素.
*
* @param set LinkedHashSet
*/
public static void addLinkedSet(Set<String> set) {
set.add("xiaoxiao");
set.add("xiaohua");
logger.info("{}添加元素后的LinkedSet: {}", StringConstant.LOG_PLACEHOLDER, set);
}
public static void main(String[] args) {
Set<String> set = Stream.of("aaa", "bbb", "ccc", "aaa").collect(Collectors.toSet());
logger.info("我是Set:{}", set);
Set<String> hashSet = new HashSet();
Set<String> linkedSet = new LinkedHashSet<>();
addHashSet(hashSet);
addLinkedSet(linkedSet);
}
}
4 测试结果
11:12:26.516 [main] INFO datastructure.SetTest - 我是Set:[aaa, ccc, bbb]
11:12:26.519 [main] INFO datastructure.SetTest - >>>>>>>>>>添加元素后的HashSet: [xiaohua, xiaoxiao]
11:12:26.519 [main] INFO datastructure.SetTest - >>>>>>>>>>添加元素后的LinkedSet: [xiaoxiao, xiaohua]
5 小结
- Set无重复数据
- HashSet无序
- LinkedHashSet有序