🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **什么是Set数据结构** * Set相对于List是简单的⼀种集合,具有和 Collection 完全⼀样的接⼝,只是实现上不同,Set 不保存重复的元素,存储⼀组唯⼀,⽆序的对象; * Set中的元素是不能重复的, 实现细节可以参考Map,因为这些Set的实现都是对应的Map的⼀ 种封装。⽐如HashSet是对HashMap的封装,TreeSet对应TreeMap; * Set底层是⼀个HashMap,由于HashMap的put()⽅法是⼀个键值对,当新放⼊HashMap的 Entry中key 与集合中原有Entry的key相同(hashCode()返回值相等,通过equals⽐较也返回 true),新添加的Entry的value会将覆盖原来Entry的value,但key不会有任何改变; * 允许包含值为null的元素,但最多只能有⼀个null元素 ## **常⻅的实现类** 1. HashSet * HashSet类按照哈希算法来存取集合中的对象,存取速度⽐较快 * 对应的Map是HashMap,是基于Hash的快速元素插⼊,元素⽆顺序。 2. TreeSet * TreeSet类实现了SortedSet接⼝,能够对集合中的对象进⾏排序 ## **代码解读** ~~~ import java.util.HashSet; import java.util.TreeSet; public class SetLearn { public static void setTest(){ HashSet<String> set = new HashSet <>(); TreeSet<String> treeSet = new TreeSet<>(); /** * 点进去下面的add看看 HashSet.add 的方法 * public boolean add(E e) { * return map.put(e, PRESENT)==null; * } * 其中 : private static final Object PRESENT = new Object(); * 所以可以说,Set是Map的一种实现,add的过程其实是将需要保存的数据存在了map的key中 * 也预示着,Set中存储的值是唯一的 * * 同样的: * HashSet的速度快,但是没有顺序 * TreeSet的速度慢,但是会排序 */ set.add("test1"); treeSet.add("treeSetTest1"); /** * 其中的方法和list一样 */ set.size(); set.isEmpty(); set.clear(); } } ~~~