📅  最后修改于: 2023-12-03 15:01:52.346000             🧑  作者: Mango
ConcurrentSkipListSet 是 Java 中线程安全的有序集合。由于它的线程安全性和高效率,被广泛用于多线程环境中。而 subSet() 方法则是它的子集方法之一。
subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive)
其中,fromElement 是子集的起点元素(包含/排除),toElement 是子集的终点元素(包含/排除)。如果 fromInclusive 为 true,则包含起点元素;如果 toInclusive 为 true,则包含终点元素。
import java.util.concurrent.ConcurrentSkipListSet;
public class ConcurrentSkipListSetTest {
public static void main(String[] args) {
ConcurrentSkipListSet<Integer> set = new ConcurrentSkipListSet<Integer>();
for (int i = 0; i < 10; i++) {
set.add(i);
}
// 打印完整集合
System.out.println("set: " + set);
// 获取子集,从3(包括3)开始到7(排除7)
ConcurrentSkipListSet<Integer> subSet1 = (ConcurrentSkipListSet<Integer>) set.subSet(3, true, 7, false);
System.out.println("subSet1: " + subSet1);
// 获取子集,从3(排除3)开始到7(排除7)
ConcurrentSkipListSet<Integer> subSet2 = (ConcurrentSkipListSet<Integer>) set.subSet(3, false, 7, false);
System.out.println("subSet2: " + subSet2);
// 获取子集,从3(包括3)开始到7(包括7)
ConcurrentSkipListSet<Integer> subSet3 = (ConcurrentSkipListSet<Integer>) set.subSet(3, true, 7, true);
System.out.println("subSet3: " + subSet3);
// 获取子集,从3(排除3)开始到7(包括7)
ConcurrentSkipListSet<Integer> subSet4 = (ConcurrentSkipListSet<Integer>) set.subSet(3, false, 7, true);
System.out.println("subSet4: " + subSet4);
}
}
输出结果为:
set: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
subSet1: [3, 4, 5, 6]
subSet2: [4, 5, 6]
subSet3: [3, 4, 5, 6, 7]
subSet4: [4, 5, 6, 7]
subSet() 方法是基于元素的自然顺序,而不是基于比较器的顺序。如果需要基于比较器获得子集,可以使用 subSet(R fromElement, R toElement) 方法。另外,需要注意赋值操作将返回一个视图,并不会将原集合中元素删除或清空。