Java进阶——Set

目录

1.Set的特点

2.TreeSet

3.TreeSet常用的构造和方法

4.方法实现的DEMO:

5.HashSet

6.LinkedHashSet


1.Set的特点

  • java.util.Set 不包含重复元素的集合、不能保证存储的顺序、只允许有一个 null

public interface Set<E> 
​
extends Collection<E> 
  • 抽象方法,都是继承自 java.util.Collection 接口,在此不做重复描述。

  • Set 集合的实现类有很多,在此我们重点了解 HashSet 、 TreeSet 、 LinkedHashSet

2.TreeSet

public class TreeSet<E> 
​
extends AbstractSet<E> 
​
implements NavigableSet<E>, Cloneable, Serializable 
  • TreeSet非线程安全

  • 值必须可比较(元素实现 Comparable 接口、传递 比较器 Comparator 对象)

  • 不能存 null

  • 判断是否是重复元素,是按照自然比较/比较器进行比较

就是说a.compareTo(b) == 0,如果是 true ,那么 add(a) 之后的 add(b) 将会返回 false ,也就是添加失败

3.TreeSet常用的构造和方法

方法名描述
TreeSet()构造一个新的空TreeSet集合,根据其元素的自然顺序进行排序
TreeSet(Comparator<?super E> comparator)构造一个新的空TreeSet集合,根据指定的比较器进行
TreeSet(Collection<?extends E> c)构造一个新的TreeSet集合,,该TreeSet集合包含指定集合中的元素,并根据其元素的自然顺序进行排序
ceiling(E e) E返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回null。
first() E返回当前在此集合中的第一个(最低的)元素。
floor(E e) E返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回null。
headSet(EtoElement)返回此集合中元素严格小于toElement的部分的视图
higher(e)返回此集合中严格大于给定元素的最小元素,如果
first()返回当前在此集合中的最后一个(最高的)元素。
lower(e)返回此集合中严格小于给定元素的最大元素,如果没有这样的元素,则返回null。
pollFirst()检索并删除第一个(最低的)元素,如果此集合为空,则返回null
pollLast()检索并删除最后一个(最高)元素,如果此集合为空,则返回null
tailSet(E fromElement)返回此集合中元素严格大于或等于fromElement的部分的视图

4.方法实现的DEMO:

TreeSet<String> set = new TreeSet(List.of("null", "a", "a", "b", "c", "e", "f", "g")); 
​
System.out.println(set); // [a, b, c, e, f, g, null] 
​
// 返回此集合中大于或等于给定元素的最小元素,如果没有这样的元素,则返回null。 
​
String ceiling = set.ceiling("d"); 
​
System.out.println(ceiling);// e 
​
// 返回当前在此集合中的第一个(最低的)元素。 
​
String first = set.first(); 
​
System.out.println(first); // a 
​
// 返回此集合中小于或等于给定元素的最大元素,如果没有这样的元素,则返回null。 
​
String floor = set.floor("d"); 
​
System.out.println(floor); // c 
​
// 返回此集合中元素严格小于toElement的部分的视图。 
​
SortedSet<String> headSet = set.headSet("c"); 
​
System.out.println(headSet); // a, b 
​
// 返回此集合中严格大于给定元素的最小元素,如果没有这样的元素,则返回null。 
​
String higher = set.higher("c"); 
​
System.out.println(higher); // e 
​
// 返回此集合中元素严格大于或等于fromElement的部分的视图。 
​
SortedSet<String> tailSet = set.tailSet("c"); 
​
System.out.println(tailSet); // c, e, f, g, null 
​
// 迭代 
​
for (Object obj : set){ 
​
System.out.println(obj); 
​
} 

5.HashSet

public class HashSet<E> 
extends AbstractSet<E> 
implements Set<E>, Cloneable, Serializable
  • 实现了 Set 接口,底层实现是 HashMap 。不保证迭代顺序,允许 null 元素

  • 非线程安全的

如果 add 的值已存在( equals 方法返回 true ,基本数据类型自动装箱)返回 false

如果 HashSet 中存的是对象,需要重写此对象类中的 equals 和 hashCode() 方法

6.LinkedHashSet

public class LinkedHashSet<E> 
extends HashSet<E> 
implements Set<E>, Cloneable, java.io.Serializable 12
  • 哈希表和双向链表实现的 Set 接口

  • 具有可预测的迭代次序(有序)

  • 内部实现是 LinkedHashMap ,顺序是插入顺序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值